정리한 문서에 분석하면서 설명되어있지 않던 명령어
[http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html] --> 명령어 설명 좋음
lui : Load upper immediate
syntex : lui $t, imm
값 : $t = imm << 16
ex)
lui $v0, 40 --> $v0 = 0x40 << 16 = 0x400000
lwl : To load the most-significant part of a word as a signed value from an unaligned memory address.
lwr : To load the least-significant part of a word from an unaligned memory address as a signed value.
0x00400830 <+80>: addiu v1,v1,2976
0x00400834 <+84>: lwl a0,3(v1)
0x00400838 <+88>: lwr a0,0(v1)
0x0040083c <+92>: lwl a1,7(v1)
+84 번지와 +88 번지의 결과 값은 같다.
결과 값이 같으니 헷갈려서 좀더 보면 +92 를 확인한다.
v1+ 7 은 0x00 을 나타내는 주소이다. 그리고 lwl $a1, 7($v1)을 하면 a1을 값은 0x676e6f이다.
그러니가.. lwl dst, src 라고 한다면,,,,,
src 주소에서 <- 방향으로 차례로 4바이트 읽어 저장하는 것이고
|<-- - - - - - - - - [ src ]
0x400ba0: 0x72 0x69 0x63 0x68 0x6f 0x6e 0x67 0x00
lwr dst, src라고 한다면.....
src 주소에서 -> 방향으로 차례로 4바이트 읽어 저장하는 것으로 해석.
[ src ]- - - - - - - - - - ->
0x400ba0: 0x72 0x69 0x63 0x68 0x6f 0x6e 0x67 0x00
jalr 명령어
jalr r # $ra <— PC+4 $ra <— return address # PC <— $r load the PC with the address in $r
bltzal 명령어
-----------------------------------------------------------------------------------------------------------------------------------------------
0x00400090 <_ftext+0>: li a1,1
0x00400094 <_ftext+4>: bltzal a1,0x4000a8 <_ftext+24>
0x00400098 <_ftext+8>: nop
0x0040009c <_ftext+12>: li t0,0xabcd
위와 같은 명령어는 bltzal의 경우 실행하면서 $pc+4는 mips 특징으로 자동적으로 수행됨.
그리고 pc 명령어는 pc+8로 셋팅됨
(gdb) x/32i $pc
0x400094 <_ftext+4>: bltzal a1,0x4000a8 <_ftext+24>
0x400098 <_ftext+8>: nop
0x40009c <_ftext+12>: li t0,0xabcd
0x4000a0 <_ftext+16>: j 0x4000b0 <_ftext+32>
(gdb) si
0x0040009c in _ftext ()
(gdb) x/32i $pc
0x40009c <_ftext+12>: li t0,0xabcd
0x4000a0 <_ftext+16>: j 0x4000b0 <_ftext+32>
0x4000a4 <_ftext+20>: nop
branch나 jmp의 l이 붙으면 link 여서 pc pc+4는 동일하게 실행
----------------------------------------------------------------------------------------------------------------------------------
'reversing > reversing' 카테고리의 다른 글
[Project] 디버거 만들기 [Python] (0) | 2017.03.30 |
---|---|
MIPS Disassemble (0) | 2017.03.30 |
ARM Handray (0) | 2016.12.06 |
C++ 리버싱 연습 (0) | 2016.11.29 |
get physical address (0) | 2016.11.29 |