Я хочу пропустить строку в C, строка x = 1;
в основном разделе с использованием bufferoverflow
; однако я не знаю, почему я не могу пропустить адрес с 4002f4
на следующий адрес 4002fb
, несмотря на то, что я считаю 7 байт из
на
.
Я также настроил параметры среды 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;
}