plt_0

记录下动态延迟加载,在unicore上没运行起来,所以在x86上运行

函数test.c

1 #include<stdio.h>

2

3 int main(void)

4 {

5 printf("abcdefg\n");

6 return 0;

7 }

反汇编(省略了相当一部分,因为没看懂且与PLT无关)

207 080482e0 <puts@plt-0x10>:

208 80482e0: ff 35 f8 9f 04 08 pushl 0x8049ff8

209 80482e6: ff 25 fc 9f 04 08 jmp *0x8049ffc

210 80482ec: 00 00 add %al,(%eax)

211 ...

212

213 080482f0 <puts@plt>:

214 80482f0: ff 25 00 a0 04 08 jmp *0x804a000

215 80482f6: 68 00 00 00 00 push $0x0

216 80482fb: e9 e0 ff ff ff jmp 80482e0 <_init+0x30>



305 080483d4 <main>:

306 80483d4: 55 push %ebp

307 80483d5: 89 e5 mov %esp,%ebp

308 80483d7: 83 e4 f0 and $0xfffffff0,%esp

309 80483da: 83 ec 10 sub $0x10,%esp

310 80483dd: c7 04 24 c0 84 04 08 movl $0x80484c0,(%esp)

311 80483e4: e8 07 ff ff ff call 80482f0 <puts@plt>

312 80483e9: b8 00 00 00 00 mov $0x0,%eax

313 80483ee: c9 leave

314 80483ef: c3 ret



416 Disassembly of section .rodata:

417

418 080484b8 <_fp_hw>:

419 80484b8: 03 00 add (%eax),%eax

420 ...

421

422 080484bc <_IO_stdin_used>:

423 80484bc: 01 00 add %eax,(%eax)

424 80484be: 02 00 add (%eax),%al

425 80484c0: 61 popa

426 80484c1: 62 63 64 bound %esp,0x64(%ebx)

427 80484c4: 65 gs

428 80484c5: 66 data16

429 80484c6: 67 addr16



658 Disassembly of section .got:

659

660 08049ff0 <.got>:

661 8049ff0: 00 00 add %al,(%eax)

662 ...

663

664 Disassembly of section .got.plt:

665

666 08049ff4 <_GLOBAL_OFFSET_TABLE_>:

667 8049ff4: 28 9f 04 08 00 00 sub %bl,0x804(%edi)

668 8049ffa: 00 00 add %al,(%eax)

669 8049ffc: 00 00 add %al,(%eax)

670 8049ffe: 00 00 add %al,(%eax)

671 804a000: f6 82 04 08 06 83 04 testb $0x4,-0x7cf9f7fc(%edx)

672 804a007: 08 16 or %dl,(%esi)

673 804a009: 83 .byte 0x83

674 804a00a: 04 08 add $0x8,%al

 

原文地址:https://www.cnblogs.com/openix/p/2537256.html