'Security > System' 카테고리의 다른 글
CTF Summary (0) | 2020.02.07 |
---|---|
[Heap Overflow] House Of Orange (0) | 2019.07.06 |
[Linux] Lazy Binding (0) | 2019.06.30 |
ROP Gadget Dictionary (0) | 2019.06.30 |
BROP (Blind Return Oriented Programming) (0) | 2019.06.26 |
CTF Summary (0) | 2020.02.07 |
---|---|
[Heap Overflow] House Of Orange (0) | 2019.07.06 |
[Linux] Lazy Binding (0) | 2019.06.30 |
ROP Gadget Dictionary (0) | 2019.06.30 |
BROP (Blind Return Oriented Programming) (0) | 2019.06.26 |
strace -ifx <file path>
옵션 i : Instruction point 값 출력
옵션 f : 현재 trace 되는 프로세스가 생성한 자식프로세스까지 trace함
옵션 x : 모든 non-ascii 문자열까지 출력(헥사코드 포함)
https://brunch.co.kr/@alden/12
자주 사용하는 git 명령어 (0) | 2021.02.27 |
---|---|
동적 라이브러리 경로 변경 (0) | 2019.07.24 |
[linux] python wsgi server, db 배포 이후 (운영, 관리) (0) | 2019.07.01 |
오픈소스 가이드 (0) | 2019.06.30 |
Eclipse + Android SDK (0) | 2019.04.06 |
** C/C++ 와 같은 native 언어는 컴파일러만 있으면 바로 소스코드를 변환한다. 파이썬,자바,C# 과 같은 가상언어들은 가상머신이 있어야만 코드를 변환할 수 있다. 단 어셈블리코드로 변환되는 것이 아니라 컴파일 시 가상머신에서 실행되는 언어로 변환된다. 따라서 모든 플랫폼 위에 가상머신이 있다면 잘 돌아간다.
** 디스어셈블하면, 기계어 코드 한줄과 어셈블리 명령어 한줄이 대응된다.
** opcode e5 는 echo 5 라고 발음
[ AT&T 문법 ]
방향: add [reg1 | addr1] [reg2 | addr2]
: [reg2 | addr2] = [reg2 | addr2] + [reg1 | addr1]
방향: mov [reg1 | addr1] [reg2 | addr2]
: [reg2 | addr2] = [reg1 | addr1]
[ intel 문법 ]
방향: add [reg1 | addr1] [reg2 | addr2]
: [reg1 | addr1] = [reg1 | addr1] + [reg2 | addr2]
방향: mov [reg1 | addr1] [reg2 | addr2]
: [reg1 | addr1] = [reg2 | addr2]
[ intel i386 레지스터 (x32) ]
[ AMD64 범용 레지스터 (x64) ]
- 범용 레지스터
- 세그먼트 레지스터
intel 모든 명령어 정보 (Instruction Set)
[ ARM 레지스터 ]
임베디드에서 자주 사용됨.
- objdump [사용법] : objdump -d <file path>
OVERVIEW: llvm object file dumper
USAGE: objdump [options] <input object files>
OPTIONS:
-aarch64-neon-syntax - Choose style of NEON code to emit from AArch64 backend:
=generic - Emit generic NEON assembly
=apple - Emit Apple-style NEON assembly
-all-headers - Display all available header information
-arch= - architecture(s) from a Mach-O file to dump
-arch-name= - Target arch to disassemble for, see -version for available targets
-archive-headers - Display archive header information
-archive-member-offsets - Print the offset to each archive member for Mach-O archives (requires -macho and -archive-headers)
-bind - Display mach-o binding info
-color - Use colors in output (default=autodetect)
-data-in-code - Print the data in code table for Mach-O objects (requires -macho)
-demangle= - Demangle symbols names
-df= - List of functions to disassemble
-dis-symname= - disassemble just this symbol's instructions (requires -macho)
-disassemble - Display assembler mnemonics for the machine instructions
-disassemble-all - Display assembler mnemonics for the machine instructions
-dsym= - Use .dSYM file for debug info
-dwarf - Dump of dwarf debug sections:
=frames - .debug_frame
-dylib-id - Print the shared library's id for the dylib Mach-O file (requires -macho)
-dylibs-used - Print the shared libraries used for linked Mach-O files (requires -macho)
-dynamic-reloc - Display the dynamic relocation entries in the file
-exports-trie - Display mach-o exported symbols
-fault-map-section - Display contents of faultmap section
-file-headers - Display the contents of the overall file header
-full-leading-addr - Print full leading address
-g - Print line information from debug info if available
-help - Display available options (-help-hidden for more)
-indirect-symbols - Print indirect symbol table for Mach-O objects (requires -macho)
-info-plist - Print the info plist section as strings for Mach-O objects (requires -macho)
-lazy-bind - Display mach-o lazy binding info
-line-numbers - Display source line numbers with disassembly. Implies disassemble object
-link-opt-hints - Print the linker optimization hints for Mach-O objects (requires -macho)
-macho - Use MachO specific object file parser
-mattr=<a1,+a2,-a3,...> - Target specific attributes
-mcpu= - Target a specific cpu type (-mcpu=help for details)
-no-leading-addr - Print no leading address
-no-leading-headers - Print no leading headers
-no-show-raw-insn - When disassembling instructions, do not print the instruction bytes.
-no-symbolic-operands - do not symbolic operands when disassembling (requires -macho)
-non-verbose - Print the info for Mach-O objects in non-verbose or numeric form (requires -macho)
-objc-meta-data - Print the Objective-C runtime meta data for Mach-O files (requires -macho)
-print-imm-hex - Use hex format for immediate values
-private-header - Display only the first format specific file header
-private-headers - Display format specific file headers
-r - Display the relocation entries in the file
-raw-clang-ast - Dump the raw binary contents of the clang AST section
-rebase - Display mach-o rebasing info
-s - Display the content of each section
-section= - Operate on the specified sections only. With -macho dump segment,section
-section-headers - Display summaries of the headers for each section.
-source - Display source inlined with disassembly. Implies disassemble object
-start-address=
- 명령어 요약
MOV [dest], [src] : 값이동
dest : reg|addr
src : imm(상수)|reg|mem
LEA [reg], [mem] : 주소이동 (Load Effect Address)
# MOV vs LEA
rbp address = 0x12341234
rbp value = 0x1
rbp-16 addr = 0x12341224 (16은 16진수로 10이다.)
rbp-16 = 0x2
MOV eax, [rbp-16] : eax = *(rbp-16) → 값을 넣기(0x2)
LEA eax, [rbp-16] : eax = (rbp-16) → 주소를 넣기(0x12341224)
= sub rbp, 16 ; rbp = rbp-16
mov eax, rbp ; eax = rbp
LEA는 2줄짜리 MOV 명령어를 1개 instruction 으로 만든다.
TEST [reg], [imm|reg] : xor (같으면 0이므로 clear)
JMP [LABEL] : 레이블에 오는 프로시저로 점프
CALL [LABEL] : 다음명령어 주소를 스택에 PUSH 하고, LABEL 주소를 호출함.
RET : 현재 RSP가 가리키고 있는 값(스택 최상위에 있는 값→ 이후 RSP+8)으로 점프
JZ : JMP Zero (Zero Flag = 1일 때)
JE : JMP Equal
JLE : JMP Less Equal than
JGE : JMP Greater Equal than
JL : JMP Less than
JG : JMP Greater than
- 문자열관련명령어
REP [instruction]
: RCX 레지스터를 1씩 감소시키면서(loop), 문자열 관련 명령어를 처리한다. memset, memcpy 구현할 때 필요
STOS
: AX를 EDI가 가리키는 주소에 넣음
rep stos byte ptr [EDI] : ptr이 가리키는 주소로부터 byte단위로 EDI에 복사한다.
보통 ptr 은 rax가 가리키는 주소이다.
-Usage-
mov rax, rsi
mov rcx, 0x5
rep stosb ; byte 단위로 실행
SCAS
: AX에 저장되어 있는 값과 EDI가 가리키는 곳에 저장 되어 있는 값을 비교
PUSH [reg] / POP [reg] : reg에 저장된 값 또는 상수를 스택에 넣는다.
ADD/SUB/MUL/DIV : 사칙연산 eflags (=rflags)에 상당한 영향을 주는 명령어
RSP : 항상 스택 최상위를 가리킴 (PUSH/POP에 의해 증감)
RBP : 현재 함수 안에서 변수들의 기준점이 된다.(Base Pointer)
각 함수의 지역변수들은 저장되는 위치가 다르다. (RBP로 현재 함수의 지역변수에 접근한다.)
Calling Convention (0) | 2019.07.03 |
---|---|
POPAD / PUSHAD (0) | 2019.06.25 |
제로, 부호 플래그 (ZF & SF) / 비교 (cmp) 에 따른 점프 명령어 (0) | 2019.05.17 |