Я написал простой код для изучения ассемблера.
Задача, которую я пытаюсь выполнить, находится в ассемблерной части: 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>