Как пропустить строку, выполняющую переполнение буфера в C

Я хочу пропустить строку в 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;  
}
12
задан Peter Mortensen 7 April 2018 в 20:55
поделиться