Я хочу пропустить строку в C, строку x=1;
в основном разделе, используя bufferoverflow
; однако я не знаю, почему я не могу пропустить адрес от 4002f4
до следующего адреса 4002fb
, несмотря на то, что я рассчитываю 7 байт с <main+35>
до <main+42>
.
Я также настроил параметры среды randomniZation и execstack в среде Debian и AMD, но я все еще получаю x=1;
. Что не так с этой процедурой?
Я использовал dba для отладки стека и адресов памяти:
0x00000000004002ef <main+30>: callq 0x4002a4 **<function>**
**0x00000000004002f4** <main+35>: movl $0x1,-0x4(%rbp)
**0x00000000004002fb** <main+42>: mov -0x4(%rbp),%esi
0x00000000004002fe <main+45>: mov $0x4629c4,%edi
void function(int a, int b, int c)
{
char buffer[5];
int *ret;
ret = buffer + 12;
(*ret) += 8;
}
int main()
{
int x = 0;
function(1, 2, 3);
x = 1;
printf("x = %i \n", x);
return 0;
}