gdb 에서 opcode 어떻게 보이게하나요?
글쓴이: declspec / 작성시간: 월, 2012/04/02 - 12:16오전
간단한건데 아무리 구글링을 해도 없네요 ㅠㅠ
gdb 로
disass main
이런식으로 명령을 내리면
Dump of assembler code for function main:
0x08048444 : lea 0x4(%esp),%ecx ; esp+4 를 ecx 로
0x08048448 : and $0xfffffff0,%esp ; esp 를 16의 배수로 정렬
0x0804844b : pushl -0x4(%ecx) ; esp 를 push? 왜?
0x0804844e : push %ebp ; main 스택프레임 잡고..
0x0804844f : mov %esp,%ebp
0x08048451 : push %edi ; 레지스터들 저장
0x08048452 : push %esi
이런 디스어셈블결과 덤프를 주는데요
여기서 실제 op코드랑 어셈블리 명령어의 HEX 데이터도
표시하게 하고싶은데 어떻게해야하나요? ㅠㅠ
각 어셈블리 라인마다 거기에 해당하는 실제 기계어코드요...
x/bx 로 hex 덤프를 보는거는
어디서 어디까지가 어떤 명령인지를 알수없으니까 안되구요...
올리같은데서는 디폴트로 나오는데 gdb 에서는
기능이 없을리가없을건데... 옵션 설정을 어떻게하는줄 모르겠네요
Forums:
RTFM 항상 질문하시는 형태가 같군요. 질문하기
RTFM
항상 질문하시는 형태가 같군요.
질문하기 전에...
1. 공식 메뉴얼을 찾아봅시다.
2. 그래도 못 찾겠으면 구글링을 해봅시다.
RET ;My life :P
질문의 요지 전달이 잘 안되어서 그런 것 같으니, 양해를...
아마 declspec님은 역 어셈블링을 통해 바이너리 핵을 해보고 싶었지만,
명령어 시작 지점을 찾지 못해서, 자동으로 disassembling 하는 도구를 원했을 겁니다.
기계어나 CPU 구조, 기존 여러 CPU 체계나 확장한 x64 체계 명령어는 복잡했을테니까요.
gdb에 관한 질문이 아니라, 자동으로 코드를 분석해서,
CPU 니모닉과 데이터 부분을 구분지어 줄 수 있는 자동화 된 프로그램을 원했으리라 생각합니다.
너무 인색하게 답변주기 보다는, 한 번만 더 배려해주었으면 좋겠습니다.
"영문" 공식 메뉴얼 속에 "정답"이 있기 때문에
"영문" 공식 메뉴얼 속에 "정답"이 있기 때문에 제가 그렇게 댓글을 단 것 입니다.
RET ;My life :P
뭔 개솔...
질문자의 의도는 단순히 opcode랑 disassembly랑 동시에 표시하게 하려면 어떡하느냔건데...
하하핫... ^^;;; 이런 상황에 답글 남기기 뻘쭘하지만....
http://www.unknownroad.com/rtfm/gdbtut/gdbadvanced.html
http://coffeenix.net/doc/develop/gdb.html#SEC50
http://coffeenix.net/doc/develop/gdb.html#SEC56
위의 세 링크 글을 읽으면 도움이 되리라 생각합니다.
요는 x와 i 명령을 통해 hex 모드와 instruction 모드로 전환한다는 것입니다.
gdb가 인터렉티브 콘솔 체계라서,
올리디버거 같은 프로그램처럼 한꺼번에 쫘악 보여주기는 어려운 것 같아요.
다음의 링크에서 적당한 프로그램을 한 번 검색해서 써보는 건 어떨까요?
http://en.wikibooks.org/wiki/X86_Disassembly/Analysis_Tools
감사합니다
disass /r main
이런식으로 /r 옵션을 주면 되네요
gdb 버전따라 지원 안되는것도 있는거같네요.
gdb man 페이지도 확인해보고
gdb 내에서 show, help 등 전부 찾아봐도 없고
google 에서
gdb raw instruction
gdb hex view
gdb opcode view
등등 한시간도넘게 검색해도 못찾아서 질문을 올린건데
RTFM 이라고 하실것까지야...
물론 메뉴얼도 봤었습니다
근데 gdb 메뉴얼이 인터넷에 어디 한두개도아니고...
이번질문은 간단한거라 확실히 제가 구글링이나 자료검색을 잘 못한거 인정하는데요...
그냥 무작정 글부터 올리는건 아닙니다 -_-;;
이전에는 strace 에 대한 질문에 직접 소스분석하라고하시던데
그럼 도데체 질문할수있는게 뭡니까?
리눅스 관련질문은 전부다 커널소스 분석해보라고하면 되는거아닌가요?
자기 기준으로 쉽고 단순한 질문이라고해서
다른사람도 똑같이 쉽게 해결할수 있다고 생각하지 맙시다
RTFM 이 뭔지 처음알았는데 상당히 기분나쁘네요
제가 쓸대없는 질문으로 도배를해서 다른사람 방해를하는것도 아닌거같은데..
제 질문이 형편없어보이면 그냥 답변 안해주시면됩니다
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
늘 바닥까지 싹싹 훑으면서 공부하시는 모습이 보기
늘 바닥까지 싹싹 훑으면서 공부하시는 모습이 보기 좋습니다 ㅎㅎ
제3자가 이런 말 해서 죄송한데
Stand Alone Complex님 같이 답변 다는 사람이 제일 짜증납니다. RTFM 어쩌고 따위의 아무 영양가 없는 답변을 달려면 집에서 그냥 STFU하고 계시라고 말씀드리고 싶어요.
그럼 익명 사용자님 본인이 도움이 되는 댓글을
그럼 익명 사용자님 본인이 도움이 되는 댓글을 다시던지요.
아무런 행동을 하지 않으며 RTFM이라고 댓글 다는 사람을 익명으로 비방하는 사람보다 RTFM이라고 댓글 달아주는 사람이 더 낫다고 생각합니다.
RET ;My life :P
>아무런 행동을 하지 않으며 RTFM이라고 댓글 다는
>아무런 행동을 하지 않으며 RTFM이라고 댓글 다는 사람을 익명으로 비방하는 사람보다 RTFM이라고 댓글 달아주는 사람이 더 낫다고 생각합니다.
RTFM만 던지고 가는 건 안하느니만 못하다고 생각합니다. 최소한 매뉴얼 어느 위치 쯤에 그런 내용이 있다 정도는 알려 주던가 아니면 검색에 적당한 키워드 정도는 던져 주고 가야 하지 않을까요.
그걸 못하시겠으면 그냥 가던 길 가면 됩니다. 번거롭게 RTFM 써놓고 갈 필요가 없죠. 게시물 내용이 규칙 위반을 한 것도 아닌데요.
--
마잇
+1. 원 질문글이 저런 모욕적인 대꾸를 받을만한
+1.
원 질문글이 저런 모욕적인 대꾸를 받을만한 질문이었는지 의문입니다.
주말사이에
주말사이에 불화가 생겼군요 -_-;
이 글타래 말고 다른글에도 분위기가 안좋던데
같은 분야쪽 사람들끼리 사이좋게 지냈으면 좋겠네요
여러 커뮤니티중 KLDP 가 제일 싸움도없고 전문가들이 많은곳같아서
여기만 이용하는데.. 음 사람이 많으면 충돌은 어쩔수없나보군요
저는 RTFM 이 욕처럼들려서 기분이 상했었는데 뭐 그냥 가벼운 뉘앙스 인것 같네요
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
댓글 달기