Русский / Russian English / Английский

Сейчас на форуме: rmn (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Крэки, обсуждения —› MSVcrt.atol
Посл.ответ Сообщение

Ранг: 0.0 (гость)
Статус: Участник

Создано: 15 февраля 2005 18:31 New!
Цитата · Личное сообщение · #1

ребят, тема можь уже поднималасъ но сам чего-то запарил.
Подгружаецаа МСВКРТ.ДЛЛ и вызываецца функция атол.
по крайней мере Олли так выдает. Голова уже кругом идет:
преобразование строки чисел в длинное целое. Вродн так.
тока вот что сие значит:
atol (s[, base])
Convert string s to a long integer in the given base. The string must consist of one or more digits, optionally preceded by a sign ("+" or "-"). The base argument has the same meaning as for atoi(). A trailing "l" or "L" is not allowed, except if the base is 0. Note that when invoked without base or with base set to 10, this behaves identical to the built-in function long() when passed a string.
И я точно знаю что навходе строка не только с цифрами, но и с буквами G,H,I.
Не в лом если поясните плизе.

Ранг: 8.9 (гость)
Статус: Участник

Создано: 15 февраля 2005 18:48 · Поправил: geRC New!
Цитата · Личное сообщение · #2

atol - это перегруженная функция, может иметь один или два аргумента. Первый - указатель на строку, а второй (если есть) - т.н. "база" - основание системы счисления. Если второй аргумент отсутствует, то полагается, что система счисления = 10

mopok пишет:
И я точно знаю что навходе строка не только с цифрами, но и с буквами G,H,I.
Не в лом если поясните плизе.

Из этого следует, что у тебя в функцию передаются два аргумента: первый - указатель на строку, а второй - система счисления. Скорее всего, что второй аргумент в твоём случае равен 24h (=36d), т.е. ты имеешь дело с т.н. base-36, когда для представления числа используется алфавит из 36 символов, обычно это "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".


Ранг: 124.7 (ветеран)
Статус: Участник

Создано: 15 февраля 2005 20:14 New!
Цитата · Личное сообщение · #3

Convert_Digs db '0123456789abcdefghijklmnopqrstuvwxyz',0

;Comment %
;        Stone's KeyMaker Makers include functions 
;
;        Converts 64 bit number in EDX:EAX to string with any number base
;
;        Input:  DS:EDI => Place to put string
;                EDX:EAX, number to convert
;                ECX, Number base
;        Output: String 
;        Registers changed: Them all?
;        Flags : Many 
;         %

Convert_Num proc near
        pushf
        pushAD

        sub     esp, 4
        mov     ebp,esp

        cld
        mov     esi, edi
        push    esi

;--- loop for each digit

        sub     bh, bh
        mov     dword ptr [ebp], eax               ;save low word
        mov     dword ptr [ebp+4], edx             ;save high word
        sub     esi, esi                          ;count digits

Connum1:
        inc     esi
        mov     eax, dword ptr [ebp+4]             ;high word of value
        sub     edx, edx                          ;clear for divide
        div     ecx                              ;divide, DX gets remainder
        mov     dword ptr [ebp+4],eax             ;save quotient (new high word)

        mov     eax, dword ptr [ebp]               ;low word of value
        div     ecx                              ;divide, DX gets remainder
                                                ;  (the digit)
        mov     dword ptr [ebp], eax               ;save quotient (new low word)

        mov     bl, dl
        mov     al, byte ptr [Convert_Digs+ebx]  ;get the digit
        stosb                                   ;store

        cmp     dword ptr [ebp], 0                ;check if low word zero
        jne     Connum1                         ;jump if not
        cmp     dword ptr [ebp+4], 0              ;check if high word zero
        jne     Connum1                         ;jump if not

        sub     al, al
        stosb                                   ;store the terminator

;--- reverse digits

        pop     ecx                              ;restore start of string
        xchg    ecx, esi
        shr     ecx, 1                           ;number of reverses
        jz      Connum3                         ;jump if none

        xchg    edi, esi
        sub     esi, 2                           ;point to last digit

Connum2 :
        mov     al, byte ptr [edi]               ;load front character
        xchg    al, byte ptr [esi]               ;swap with end character
        stosb                                   ;store new front character
        dec     esi                              ;back up
        loopd   Connum2                         ;loop back for each digit

;--- finished

Connum3  :
        add     esp, 4

        popad
        popf
        ret
Convert_Num endp           ;Convert_Num


Ранг: 124.7 (ветеран)
Статус: Участник

Создано: 15 февраля 2005 20:23 · Поправил: Nitrogen New!
Цитата · Личное сообщение · #4

а кстати ежели на асме пишешь - возьми да подгружай ее сам.. я так обычно и делаю..

p.s последний раз наблюдал сие в hyena

Ранг: 8.9 (гость)
Статус: Участник

Создано: 15 февраля 2005 20:36 · Поправил: geRC New!
Цитата · Личное сообщение · #5

По-моему, удобнее взять любую библиотеку для работы с большими числами, тот же biglib от roy - тогда не будет ограничения на 64бита.

Nitrogen пишет:
p.s последний раз наблюдал сие в hyena

А я - в TSRh Trial KeygenMe #2 )))

Ранг: 384.1 (мудрец)
Статус: Участник
www.int3.net

Создано: 15 февраля 2005 21:00 New!
Цитата · Личное сообщение · #6

geRC
А где можно ваши кейгенми посмотреть?
 eXeL@B —› Крэки, обсуждения —› MSVcrt.atol

Видеокурс ВЗЛОМ