분류 전체보기 205

64비트 알아두어야할 점

AMD에서 32비트와 호환되는 AMD64를 만들었고 이것을 INTEL이 라이센스를 사들여 INTEL64로 바꾸게 됨 1. 64비트 레지스터 64비트에서는 R8~R15레지스터가 추가됨. 기존비트에서 32비트 더 확장되어 RAX, RBX로 사용됨. 세그먼트 레지스터는 사용하지 않으며 32비트 호환용으로만 제공됨. 2. 함수호출 규약 32비트에서는 cdecl, stdcall, fastcall 등이 존재했지만 64비트에서는 변형된 fastcall 하나로 만들어졌다. (INTEL) 64비트에서 파라미터는 RCX, RDX, R8, R9 순서로 들어가게 되며, 실수일 경우 XMM0, XMM1, XMM2, XMM3 순으로 들어가게 된다. 파라미터가 5개가 넘어가는 경우 5번째부터 스택에 저장시켜 전달한다. AMD는 R..

Windows 2020.01.15

상황별 어셈블리 명령어의 사용 (익숙해지면 편함)

3. 상황별 어셈블리 명령어 http://sarghis.com/blog/357/ 어셈블리 명령어에 대한 이해를 돕기 위해서 상황별로 어떻게 사용되는지 정리하도록 하자. 데이터 이동 어셈블리에서 데이터를 옮기는 방법은 MOV 명령어를 사용하면 된다. MOV [복사될 곳], [읽어들일 곳] MOV EAX, EBX의 경우 EBX 레지스터를 EAX에 대입하는 것이다. MOV EAX, [EBX]로 표현되어 있는 경우에는 EBX가 가리키는 값을 EAX에 대입한다. MOV EAX, [EBP + 10]의 경우 EBP의 주소에서 10만큼 증가한 주소지의 값을 EAX로 대입한다. MOV EAX, [EBP – 10]의 경우 EBP의 주소에서 10만큼 감소한 주소지의 값을 EAX로 대입한다. [EBP + 10]과 [EBP –..

기본개념 2020.01.15

Radare2 디버깅 커맨드

Radare2 디버깅 radare2 -d [파일명]: 디버거 모드 오픈 radare2 -w [파일명]: 쓰기 모드 오픈 | o [file] open [file] file in read-only | o+ [file] open file in read-write mode | on [file] 0x4000 map raw file at 0x4000 (no r_bin involved) | oo[?] reopen current file (kill+fork in debugger) | ood 현재파일 디버거 모드로 재실행 - 비쥬얼 모드 toggl breakpoints with F2 single-step with F7 (s) step-over with F8 (S) continue with F9 - 커맨드 모드 | db ..

Debugger/radare2 2020.01.07

[GDB] 라이브러리 함수 분기에 대하여...

왜 사용자 함수는 되고 공유라이브러리? 함수 분기에 대한 disassemble은 안되는지...? 0x000104f0 : ldr r3, [pc, #92] ; 0x10554 0x000104f4 : ldr r3, [r3] 0x000104f8 : mov r0, r3 0x000104fc : bl 0x10374 막상 s를 입력하여 0x10374로 분기하면 그 다음 명령어들은 건너뛰고 printf함수로 이동되었다. gef> x/10i 0x20718 0x20718: andeq r0, r0, r0 0x2071c: andeq r0, r0, r0 gef> x/5i 0x10374 0x10374: add r12, pc, #0, 12 gef> disassemble 0x10374 No function contains specifi..

Debugger/GDB 2020.01.05