Сейчас на форуме: morgot, 2nd, Rio, CDK123, zds, tyns777, tihiy_grom (+5 невидимых)

 eXeL@B —› Программирование —› преобразование QWORD в десятеричную строку
Посл.ответ Сообщение


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 04 октября 2008 12:03
· Личное сообщение · #1

на входе число содержащиеся в двух регистрах... к примеру EAX = 12345678, EDX = 87654321 , в EDX старший разряд... все число вместе = 8765432112345678 (это хекс), мне нужно это число преобразовать в десятеричное = 9756277977086449272

В Си есть функция __64Int если я не ошибаюсь...
Какого вида должна быть строка форматирования для wsprintf чтобы произвести выше указанное преобразование?
Поможите плиз....

-----
aLL rIGHTS rEVERSED!





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 октября 2008 12:21 · Поправил: coderess
· Личное сообщение · #2

// Ошибся

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 04 октября 2008 12:42 · Поправил: flamer
· Личное сообщение · #3

coderess
DWORD - это круто, но вопрос, как я понимаю именно в QWord

DaRKSiDE Если я не ошибаюсь, wsprintf работает с 32-битными параметрами.
Но решение под носом -- использование серии функций преобразования 64-битных чисел в строку, а затем уже внедрение этой строки в нужное место.

C:
Code:
  1.          char buffer[65];
  2.          char buffer2[128];
  3.          _ui64toa( 0xffffffffffffffffL, buffer,  10 );
  4.           printf( "base %d: %s (%d chars)\n", 10, buffer, strlen(buffer) );
  5.           wsprintf(buffer2, "value of 64 bit integer = %s",buffer);
  6.           printf( "buffer: %s", buffer2);


Asm:
Code:
  1.     include msvcrt.inc
  2.     includelib msvcrt.lib
  3. ...
  4.          push 10 ; база
  5.          push offset buffer ; буфер для хранения
  6.          push eax ; верхнее двойное слово
  7.          push ebx ; нижнее двойное слово
  8.          call crt__ui64toa
  9. ...





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 04 октября 2008 12:46
· Личное сообщение · #4

coderess пишет:
Возможно то что тебе нужно


Спасибо конечно, но это форматирование DWORD, а мне надо QWORD!

-----
aLL rIGHTS rEVERSED!





Ранг: 104.9 (ветеран), 47thx
Активность: 0.040.02
Статус: Участник

Создано: 04 октября 2008 13:42 · Поправил: ManHunter
· Личное сообщение · #5

DaRKSiDE
на FASM'е

Code:
  1. format PE GUI 4.0
  2. entry start
  3. include 'c:\program files\fasm\include\win32a.inc'
  4. section '.data' data readable writeable
  5. buff rb 100h
  6. section '.code' code readable executable
  7.   start:
  8.         mov     eax,12345678h
  9.         mov     edx,87654321h
  10.         mov     edi,buff
  11.         pusha
  12.         xchg    esi,edx
  13.         mov     ebx,10
  14.         xor     ecx,ecx
  15. bignum_1:
  16.         xchg    eax,esi
  17.         xor     edx,edx
  18.         div     ebx
  19.         xchg    esi,eax
  20.         div     ebx
  21.         or      dl,'0'
  22.         push    edx
  23.         inc     ecx
  24.         or      eax,eax
  25.         jnz     bignum_1
  26. bignum_2:
  27.         pop     eax
  28.         stosb
  29.         loop    bignum_2
  30.         invoke  MessageBox,0, buff, 0, MB_OK
  31.         invoke  ExitProcess,0
  32. section '.idata' import data readable writeable
  33.    library kernel32,'KERNEL32.DLL',
  34.           user32,'USER32.DLL'
  35.   include 'c:\program files\fasm\include\apia\kernel32.inc'
  36.   include 'c:\program files\fasm\include\apia\user32.inc'


исходник + exe в аттаче




Ранг: 104.9 (ветеран), 47thx
Активность: 0.040.02
Статус: Участник

Создано: 04 октября 2008 13:46
· Личное сообщение · #6

Не цепляется аттач

e0e6_04.10.2008_CRACKLAB.rU.tgz - bignum.zip




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 04 октября 2008 13:59
· Личное сообщение · #7

flamer пишет:
Asm:
Code:

1. include msvcrt.inc
2. includelib msvcrt.lib
3. ...
4. push 10 ; база
5. push offset buffer ; буфер для хранения
6. push eax ; верхнее двойное слово
7. push ebx ; нижнее двойное слово
8. call crt__ui64toa
9. ...



Спасибо ОГРОМНОЕ! Все робит

Спасибо всем!
Вопрос закрыт!

-----
aLL rIGHTS rEVERSED!



 eXeL@B —› Программирование —› преобразование QWORD в десятеричную строку
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати