source

__libc_start_main에서 무슨 일이 일어나고 있는 거지?

factcode 2023. 10. 6. 22:04
반응형

__libc_start_main에서 무슨 일이 일어나고 있는 거지?

고급 코드 -> 실행 파일의 단계를 정말로 이해하려고 노력하고 있습니다.하지만 어려움이 좀 있습니다.

제가 빈칸을 써놨습니다.int main() {}C 파일을 작성하고 다음을 통해 분해를 해독하려고 합니다.objdump -d. 다음과 같은 일이 벌어지고 있습니다.

  • 인에_start, 선형 설정, 스택에서 인수 푸시, 호출__libc_start_main
  • 인에__libc_start_main, 첫번째 행은.jmp *0x8049658

단, 사용시objdump -R이전 기록을 확인하기 위해, 그 값을 확인합니다.0x8049658__libc_start_main그 자체!

제가 뭘 놓쳤는지..

편집: 출처의 일부입니다.

 080482c0 <__libc_start_main@plt>:
 80482c0:       ff 25 58 96 04 08       jmp    *0x8049658
 80482c6:       68 08 00 00 00          push   $0x8
 80482cb:       e9 d0 ff ff ff          jmp    80482a0 <_init+0x2c>

Disassembly of section .text:

080482d0 <_start>:
 80482d0:       31 ed                   xor    %ebp,%ebp
 80482d2:       5e                      pop    %esi
 80482d3:       89 e1                   mov    %esp,%ecx
 80482d5:       83 e4 f0                and    $0xfffffff0,%esp
 80482d8:       50                      push   %eax
 80482d9:       54                      push   %esp
 80482da:       52                      push   %edx
 80482db:       68 50 84 04 08          push   $0x8048450
 80482e0:       68 e0 83 04 08          push   $0x80483e0
 80482e5:       51                      push   %ecx
 80482e6:       56                      push   %esi
 80482e7:       68 d0 83 04 08          push   $0x80483d0
 80482ec:       e8 cf ff ff ff          call   80482c0 <__libc_start_main@plt>
 80482f1:       f4                      hlt
 80482f2:       66 90                   xchg   %ax,%ax



 DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE 
08049644 R_386_GLOB_DAT    __gmon_start__
08049654 R_386_JUMP_SLOT   __gmon_start__
08049658 R_386_JUMP_SLOT   __libc_start_main

"@plt"로 끝나는 첫 번째 블록은 절차 연계 테이블(https://stackoverflow.com/a/5469334/994153) 입니다.jmp *0x8049658간접 분기 명령어이므로 실제로 다음으로 점프하고 있습니다.__libc_start_main실행 시간에 RAM에 로드되는 것으로 끝나는 장소입니다.

의 실제 RAM 주소__libc_start_main프로그램이 로드될 때 동적 로더에 의해 RAM에 생성되는 Dynamic RELOCATION RECORD 테이블에 있습니다.

언급URL : https://stackoverflow.com/questions/16970281/whats-going-on-in-libc-start-main

반응형