> x *! 

load된 .dll list 출력 (lm 명령과 동일)


> x (dll name)!

dll의 전체 symbol 출력


> sxe ld:(dllName).dll

dll load시 exception 발생(load되지 않은 dll에 bp걸 때 사용)


cmd> symchk.exe c:\WINDOWS\system32\ntoskrnl.exe /s http://msdl.microsoft.com/download/symbols

PDB 파일 다운로드





Ext)

> https://developer.mozilla.org/en-US/docs/Mozilla/Using_the_Mozilla_symbol_server

Mozila Symbol Server 


https://developer.mozilla.org/en-US/docs/Mozilla/Debugging/Debugging_on_Windows

Firefox Windows 디버깅







'# System > Tools' 카테고리의 다른 글

생각날 때마다 적어놓은 windbg 사용법  (0) 2018.12.20
Pwntools 설치 / 오류 해결  (0) 2017.08.03
ltrace 사용법  (0) 2017.07.27
blog image

Written by NoneType

Korean Pwner


archiving Binaries / writing Solves on my Github

https://github.com/nonetype-pwn/CTF-Archive


Also making Pwnable-Challenges on Github too

https://github.com/nonetype-pwn/Own-Pwnables



'#기록' 카테고리의 다른 글

Writing pwnable-Writeups on github  (0) 2018.12.05
blog image

Written by NoneType

Korean Pwner

MIPS Assembly 정리

공유기 취약점 분석 중, 펌웨어의 CGI가 MIPS로 되어 있길래 (Hex-Ray도 안됨) 공부 겸 적어 놓는다.


ARM과 비슷한 것 같지만, ARM은 i386 Linux Assembly랑 명령어 작명이 비슷하기라도 했지, 이건 생판 처음 보는 분들이 맞이해 주신다.




Registers


 레지스터 번호

 호출명

 용도

 $0

 $zero

 항상 Zero로 고정되어 있음

 $1

 $at

 Assembler Temporary 레지스터 (명령 내 임시값)

 $2 ~ $3

 $v0, $v1

 반환 값 레지스터

 $4 ~ $7

 $a0 ~ $a3

 인자 레지스터

 $8 ~ $15

 $t0 ~ $t7

 임시 레지스터 (subprogram 호출 중 보존X)

 $16 ~ $23

 $s0 ~ $s7

 저장되는(?) 레지스터 (subprogram 호출 중 보존O)

 $24 ~ $25

 $t8 ~ $t9

 임시 레지스터 확장 Ver.

 $26 ~ $27

 $k0 ~ $k1

 커널 레지스터

 $28

 $gp

 전역 포인터

 $29

 $sp

 스택 포인터

 $30

 $fp

 프레임 포인터

 $31

 $ra

 리턴 주소

 $f0 ~ $f3

 

 부동 소수점 포인터 (Floating point return values라고 적혀있다.)

 $f4 ~ $f10

 

 임시 레지스터

 $f12 ~ $f14

 

 subprogram에 전달되는 처음 두개의 인자값을 담는 레지스터

 $f16 ~ $f18

 

 임시 레지스터 확장

 $f20 ~ $f31

 

 저장되는 레지스터 (subprogram 보존O)





Instructions


MIPS 명령은 3가지 종류가 있다.

R (Register) / I (Immediate) / J (Jump)


R type의 명령은 사용하는 모든 Operand가 register인 명령을 일컫는다.

R type의 명령은 아래와 같이 이루어져 있다.

opcodersrtrdshift (shamt)funct
6 bits5 bits5 bits5 bits5 bits

6 bits

rs, rt = source register 1, 2 (source / target)

rd = destination register



I type의 명령은 사용하는 Operand가 즉치값(immediate value) 과 register로 이루어 져 있는 명령을 일컫는다.

I type의 명령은 아래와 같이 이루어져 있다.

opcodersrtIMM
6 bits5 bits5 bits

16 bits

IMM(즉치값)은 최대 16bit로 제한되어 있고, 더 큰 값을 사용하려면 추가적인 과정이 필요하다.



J type의 명령은 jump가 필요할 때 사용되는 명령을 일컫는다.

J type의 명령은 아래와 같이 이루어져 있다.

OpcodePseudo-Address
6 Bits26 Bits


FR FI 명령도 있긴 하지만, 부동 소수점 숫자로 사용된다는 점 외에는 차이점이 없다.



Arithmetic Instructions

일반적인 산술에 사용되는 명령어들이다.

($r 은 레지스터 값, $i는 즉치값, $a는 주소값으로 서술한다.)


add $rd, $rs, $rt -> rd = rs - rt

addu $rd, $rs, $rt -> 상기 동일, unsigned 취급


sub $rd, $rs, $rt -> rd = rs - rt

subu $rd, $rs, $rt -> 상기 동일, unsigned 취급


mult $rd, $rs, $rt -> rd = rs * rt

multu $rd, $rs, $rt -> 상기 동일, unsigned 취급


div $rd, $rs, $rt -> rd = rs / rt (몫은 하위 32bit / 나머지는 상위 32bit)

divu $rd, $rs, $rt -> 상기 동일, unsigned 취급


and $rd, $rs, $rt -> rd = rs & rt

or $rd, $rs, $rt -> rd = rs | rt

nor $rd, $rs, $rt -> rd = !(rs | rt)

xor $rd, $rs, $rt -> rd = rs ^ rt


addi $rd, $rs, $i -> rd = rs + i

addiu $rd, $rs, $i -> 상기 동일, unsigned 취급

(subi 명령은 존재하지 않는다. addi 명령의 즉치값에 음수를 주면 된다고 함)


andi $rd, $rs, $i -> rd = rs & i

ori $rd, $rs, $i -> rd = rs | i

xori $rd, $rs, $i -> rd = rs ^ i


추가 예정





'# Programming > Assembly' 카테고리의 다른 글

MIPS Assembly 정리  (0) 2018.08.02
blog image

Written by NoneType

Korean Pwner