프로그래밍

 3198, 1/160 회원가입  로그인  
   pppio
   [어셈] 어셈블리어 질문드려요.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3523 [복사]


안녕하세요 어셈블리어 질문 몇가지 드려요.

리눅스에서 GDB의 examine 명령어를 이용한 것들인데요.

(gdb) x/x $eip

이 명령어로 메모리를 조사하는데,

조사하는 것의 의미는 메모리에 저장된 값이 무엇인지 보는건가요?

(gdb) x/8xb $eip

또 이렇게하면 8개의 메모리를 조사하는데,

어디 주소부터 시작해서 8개를 조사하나요?

(gdb) x/8xw $eip

마지막으로 이 명령어를 쓰면, 이 위의 명령의 결과값이 반대로 묶여서 출력되는데,

word 단위로 출력하는데에 굳이 역순으로 묶이는 이유가 뭔가요?

도움 부탁드립니다..!

  Hit : 3810     Date : 2012/11/06 03:19



    
송시 eip register 에 저장된 값을 출력해주는데요.

어디에서 부터 8개를 출력하느냐는 레지스터가 가지고 있는 부분부터 입니다.

좀더 쉽게 생각해본다면

break 를 걸어놓고 멈추어버린 곳에 저장된 eip 값부터 출력해줍니다.

순서로 생각해본다면

1,2,3,4,5 라는 실행순서에서 eip 라는 레지스터는 다음에 실행될 것을 저장한다고 가정해볼께요.

2에서 브레이크를 걸게되면 eip 에는 3이 저장되고

x/x 에 명령에 3을 출력하고

x/2x 명령에 3부터 시작해서 +2개를 출력해서 3,4 가 될 것입니다.

마지막 질문의 역순으로 묶이는 이유는 little edian 때문이 아닐까 싶네요.
2012/11/07  
pppio 감사합니다! 2012/11/09