Есть такой вот код Code: #include <stdio.h> #include <string.h> #include <stdlib.h> // Compilation parameters // gcc -m32 -fno-stack-protector -Wl,-z,norelro -z execstack binary_exploitation.c -o binary_exploitation int main(int argc, char * argv[]) { char buf[128]; char s[1024]; if (read(0, s, 1024) != 0) { strcpy(buf, s); printf("%s", buf); } return 0; } И есть два бинарника, которые были скомпилированы с указанными параметрами. В одном из них(binary) я могу провести атаку, а в другом(binary_exploitation) нет. В чем может быть проблема? Вот бинарники rghost.net/62vQGbqph
И почему бинарники отличаются? Вот два дампа (gdb) disas main Dump of assembler code for function main: 0x0804845b <+0>: lea 0x4(%esp),%ecx 0x0804845f <+4>: and $0xfffffff0,%esp 0x08048462 <+7>: pushl -0x4(%ecx) 0x08048465 <+10>: push %ebp 0x08048466 <+11>: mov %esp,%ebp 0x08048468 <+13>: push %ecx 0x08048469 <+14>: sub $0x484,%esp 0x0804846f <+20>: sub $0x4,%esp 0x08048472 <+23>: push $0x400 0x08048477 <+28>: lea -0x488(%ebp),%eax 0x0804847d <+34>: push %eax 0x0804847e <+35>: push $0x0 0x08048480 <+37>: call 0x8048310 <read@plt> 0x08048485 <+42>: add $0x10,%esp 0x08048488 <+45>: test %eax,%eax 0x0804848a <+47>: je 0x80484bc <main+97> 0x0804848c <+49>: sub $0x8,%esp 0x0804848f <+52>: lea -0x488(%ebp),%eax 0x08048495 <+58>: push %eax 0x08048496 <+59>: lea -0x88(%ebp),%eax 0x0804849c <+65>: push %eax 0x0804849d <+66>: call 0x8048330 <strcpy@plt> 0x080484a2 <+71>: add $0x10,%esp 0x080484a5 <+74>: sub $0x8,%esp 0x080484a8 <+77>: lea -0x88(%ebp),%eax 0x080484ae <+83>: push %eax 0x080484af <+84>: push $0x8048560 0x080484b4 <+89>: call 0x8048320 <printf@plt> 0x080484b9 <+94>: add $0x10,%esp 0x080484bc <+97>: mov $0x0,%eax 0x080484c1 <+102>: mov -0x4(%ebp),%ecx 0x080484c4 <+105>: leave 0x080484c5 <+106>: lea -0x4(%ecx),%esp 0x080484c8 <+109>: ret (gdb) disas main Dump of assembler code for function main: 0x0804847c <+0>: push %ebp 0x0804847d <+1>: mov %esp,%ebp 0x0804847f <+3>: and $0xfffffff0,%esp 0x08048482 <+6>: sub $0x490,%esp 0x08048488 <+12>: movl $0x400,0x8(%esp) 0x08048490 <+20>: lea 0x10(%esp),%eax 0x08048494 <+24>: mov %eax,0x4(%esp) 0x08048498 <+28>: movl $0x0,(%esp) 0x0804849f <+35>: call 0x8048340 <read@plt> 0x080484a4 <+40>: test %eax,%eax 0x080484a6 <+42>: je 0x80484d6 <main+90> 0x080484a8 <+44>: lea 0x10(%esp),%eax 0x080484ac <+48>: mov %eax,0x4(%esp) 0x080484b0 <+52>: lea 0x410(%esp),%eax 0x080484b7 <+59>: mov %eax,(%esp) 0x080484ba <+62>: call 0x8048360 <strcpy@plt> 0x080484bf <+67>: lea 0x410(%esp),%eax 0x080484c6 <+74>: mov %eax,0x4(%esp) 0x080484ca <+78>: movl $0x8048570,(%esp) 0x080484d1 <+85>: call 0x8048350 <printf@plt> 0x080484d6 <+90>: mov $0x0,%eax 0x080484db <+95>: leave 0x080484dc <+96>: ret Снизу я компилировал, сверху уже дан был и его надо экслойтировать