Изменить положение локальной переменной на самый низкий адрес в стеке - PullRequest
0 голосов
/ 01 мая 2018

Я написал простой код для изучения ассемблера.

Задача, которую я пытаюсь выполнить, находится в ассемблерной части: mycode.s
Мне интересно, как бы я мог вручную изменить положение моей локальной переменной int var (она расположена в стеке, потому что она локальная) на минимально возможное место (адрес) в стеке ...

Я использую следующий код:

#include<stdio.h>
int c = 0;

int main()
{
    int var = 0;
    if( var == c)
    {
        printf("here");
    }
    return 0;
}

когда я собираю свой код с помощью gcc -m32 -S mycode.c
я получаю:

    .file   "mycode.c"
    .globl  c
    .bss
    .align 4
    .type   c, @object
    .size   c, 4
c:
    .zero   4
    .section    .rodata
.LC0:
   .string  "here"
   .text
   .globl   main
   .type    main, @function
main:
    leal    4(%esp), %ecx
    andl    $-16, %esp
    pushl   -4(%ecx)
    pushl   %ebp
    movl    %esp, %ebp
    pushl   %ecx
    subl    $20, %esp
    movl    $0, -12(%ebp)
    movl    c, %eax
    cmpl    %eax, -12(%ebp)
    jne .L2
    subl    $12, %esp
    pushl   $.LC0
    call    printf
    addl    $16, %esp
.L2:
    movl    $0, %eax
    movl    -4(%ebp), %ecx
    leave
    leal    -4(%ecx), %esp
    ret
    .size   main, .-main
    .ident  "GCC: (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0"
    .section    .note.GNU-stack,"",@progbits

Какие инструкции я могу использовать, чтобы проверить текущие адреса стека и найти минимально возможный адрес (например: 0x003 <0x004) .. Спасибо </p>

...