Сборка: какая система возврата? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть сборка кода, и я думаю, что этот код возвращает только значение по адресу [ebp+0x8], равное 0xa254.Но ответь неправильно.Что я пропустил?

.intel_syntax noprefix
.bits 32

.global asm2

asm2:
    push    ebp
    mov     ebp,esp
    sub     esp,0x10
    mov     eax,DWORD PTR [ebp+0xc]
    mov     DWORD PTR [ebp-0x4],eax
    mov     eax,DWORD PTR [ebp+0x8]
    mov     DWORD PTR [ebp-0x8],eax
    jmp     part_b
part_a: 
    add     DWORD PTR [ebp-0x4],0x1
    add     DWORD PTR [ebp+0x8],0x76
part_b: 
    cmp     DWORD PTR [ebp+0x8],0xa1de
    jle     part_a
    mov     eax,DWORD PTR [ebp-0x4]
    mov     esp,ebp
    pop     ebp
    ret

1 Ответ

0 голосов
/ 11 октября 2018

шаг за шагом

.intel_syntax noprefix
.bits 32

.global asm2

asm2:
    push    ebp
    mov     ebp,esp
    sub     esp,0x10
    mov     eax,DWORD PTR [ebp+0xc]
    mov     DWORD PTR [ebp-0x4],eax
    mov     eax,DWORD PTR [ebp+0x8]
    mov     DWORD PTR [ebp-0x8],eax
    jmp     part_b
part_a: 
    add     DWORD PTR [ebp-0x4],0x1
    add     DWORD PTR [ebp+0x8],0x76
part_b: 
    cmp     DWORD PTR [ebp+0x8],0xa1de
    jle     part_a
    mov     eax,DWORD PTR [ebp-0x4]
    mov     esp,ebp
    pop     ebp
ret

давайте сначала переименуем параметры вызова в «a», «b», а локальные в «x» и «y»

asm2:
    push    ebp
    mov     ebp,esp
    sub     esp,0x10
    mov     eax,a
    mov     x,eax
    mov     eax,b
    mov     y,eax
    jmp     part_b
part_a: 
    add     x,0x1
    add     b,0x76

итеперь посмотрим, что происходит

asm2:
    push    ebp
    mov     ebp,esp       ; stack frame
    sub     esp,0x10      ; make some room for locals

    mov     eax,a
    mov     x,eax         ; x = a
    mov     eax,b
    mov     y,eax         ; y = b
    jmp     part_b        ; while (b <= 0xa1de)  { // condition see below
part_a: 
    add     x,0x1         ; x++;
    add     b,0x76        ; b+=76;
part_b: 
    cmp     b,0xa1de      ; } // condition for while: (b <= 0xa1de)
    jle     part_a
    mov     eax,x         ; return x;

    mov     esp,ebp       ; remove stackframe
    pop     ebp
ret

, поэтому вам нужно знать, какие параметры были, чтобы узнать, что возвращается.для того, что я вижу, это что-то вроде a+(0xa1de-b)/0x76

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...