[완료] gas 관련 질문 jmp 다음에 있는 *는 무엇인가요 ?
글쓴이: hongwoo / 작성시간: 수, 2009/06/03 - 9:08오후
안녕하세요.
gas로 디스어셈블하다보면.. jmp 다음에 *가 나오고 주소값인듯 보이는 숫자가 오는걸 종종 보게됩니다.
이게 무슨뜻인가요 ?
objdump -Ss file 한 결과입니다. ... 080485e0 <__gmon_start__@plt>: 80485e0: ff 25 00 c1 04 08 jmp *0x804c100 80485e6: 68 28 00 00 00 push $0x28 80485eb: e9 90 ff ff ff jmp 8048580 <__errno_location@plt-0x10> 080485f0 <getenv@plt>: 80485f0: ff 25 04 c1 04 08 jmp *0x804c104 80485f6: 68 30 00 00 00 push $0x30 80485fb: e9 80 ff ff ff jmp 8048580 <__errno_location@plt-0x10> ... 또는 ... 8049aeb: c7 04 24 d4 ac 04 08 movl $0x804acd4,(%esp) 8049af2: 89 44 24 0c mov %eax,0xc(%esp) 8049af6: e8 d5 eb ff ff call 80486d0 <fwrite@plt> 8049afb: 8d 43 64 lea 0x64(%ebx),%eax 8049afe: 83 f8 04 cmp $0x4,%eax 8049b01: 0f 87 ef 00 00 00 ja 8049bf6 <exit@plt+0x14d6> 8049b07: ff 24 85 ec ad 04 08 jmp *0x804adec(,%eax,4) ...
나름대로 검색은 해봤는데요... 잘 모르겠습니다.
이걸 알아보려면 어떤 키워드로 검색을 해야하는지라도 알려주시면 감사하겠습니다.
ndisasm으로 나온결과랑 비교를 해봤는데.., 제가 뭘 모르는건지.. 인스트럭션들이 약간씩 틀어지는거 같습니다.
ndisasm file 한 결과입니다. ... 00001B07 FF24 jmp word near [si] 00001B09 85EC test sp,bp 00001B0B AD lodsw 00001B0C 0408 add al,0x8 ...
이 부분이 objdump로 했을 때는 아래와 같이 됩니다.
ff 24 85 ec ad 04 08 jmp *0x804adec(,%eax,4)
흐음...
Forums:
제가 알기론.
메모리나 레지스터로 branch,jmp 같은 이동을 할려면 앞에 *를 써줘야 합니다.
<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인
<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인
ndisasm에 비트 옵션을
ndisasm에 비트 옵션을 빼먹으신 것 같네요. 16비트스러운 느낌이 납니다.
내용추가: 제가 -b32를 주고 테스트해 보니 jmp dword near [eax*4+0x804adec]를 결과로 출력했습니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
프로그램 실행시, 가상 메모리에 어떤 내용들이 채워지게 되죠.
jmp *0x804c104는 0x804c104라는 주소에 저장된 주소로
점프하라는 명령입니다.
*연산자의 의미만큼은 c언어의 포인터 개념과 동일합니다.
예를 들어
에서 0x80495d8의 내용을 보니
네요.
0x80482ca라는 주소가 들어 있습니다.
결국 0x80482ca로 점프하라는 말이지요.
-----------------------
Go to the U-City
----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------
댓글 달기