반응형
__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
반응형
'source' 카테고리의 다른 글
마리아에 대한 wpcli를 통해 사용자의 암호 설정DB (0) | 2023.10.06 |
---|---|
sqlite 데이터베이스를 pandas 데이터프레임으로 열고 변환하는 방법 (0) | 2023.10.06 |
스키마와 테이블, 데이터베이스의 차이점은 무엇입니까? (0) | 2023.10.06 |
앵귤러 부츠 스트랩 모달이 배경을 열어 둡니다. (0) | 2023.10.06 |
열린 URL을 변경할 때 - jQuery를 선택합니다. (0) | 2023.10.06 |