Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- iptables
- edge trigger
- C언어
- NAPT
- level trigger
- epoll_wait
- LOB
- vtable
- BOF
- packet filter
- doupdate
- 풀이
- .nret core 배포
- epoll
- Docker
- Compiler
- ncurses
- wrefresh
- DOCKER-USER
- cbpf
- .net core 7
- ioctl
- 취약점
- wnourefresh
- rfc5508
- packet flow
- 어셈블리어
- REDIS
- mvwin
- architecture
Archives
- Today
- Total
Tuuna Computer Science
[디버거] 디버거 제작을 위한 ToDo it List 본문
일단 ToDo 리스트에서 한것은 X표시하고 안한것은 [] 표시로 빈칸을 뒀는데 한것보다 안한게 많네... ㅎ
계속 열심히 달려야지.
[x]ELF 중요한 메타데이터 파싱하기
[x]ELF 각 각의 심볼 인덱스 입력시 헥스 덤프 출력
[x]인텔 기계어 형식 정리하기
[]PLT, GOT 값 찾아가기 (plt에 있는 라이브러리 함수 이름 체킹)
[x]static의 경우 찾기가 조금 어렵네 인덱스 번호가 아니라 함수의 이름만 적어서 찾을 수 있도록 해야겠다. (아니면 FUNC만 출력할 수 있도록할까)
[x]헥스 덤프를 통해 나온 값 기계어 형식에 맞춰서 디스어셈하기
[]어셈블리로 정의한 함수는 왜 readelf -s binnary 했을 때 보이지 않는가 (size가)
[]data flow analysis
[]symbolic execution
[]concolic execution
[]함수 디스어셈블경우 => 해당 함수 위치에서 함수의 끝이 어딘지 판단하는 알고리즘이 필요 (x86, x64상의 함수 에필로그 바이너리 코드 형태인지 아닌지)
[x]디버거의 기본 동작(메모리 조회, 레지스터 조회, 메모리 쓰기 => ptrace를 통해) => ptrace 원리 공부하기
[]IR(중간언어)에 대해 자세히 공부하기
[]BinaryAnalysis_Documents-2(1) 안에 PDF 공부하기
[]UI작업은 GTK+로 하기 or 동아리원중에 찾기
[x]PTRACE_SYSCALL, PTRACE_SINGLESTEP 정확히 이해하기
[x]ptrace => break point 잡기
[]ptrace memory inject 구현하기
[x]intel architecture manual 2권 2장 다 보기
[x]intel architecture manual 3권 3장( protected-Mode memory management), 4장(Paging) 다보기
[x]stripped 파일의 경우 즉, symtab를 찾을 수 없는 경우 그냥 다 분석한다.
[]함수의 에필로그, 프롤로그 분석해서 sub_<address>의 구조
[]각 종 루틴들 그래프 (GUI)화 시키기 (인자 instruction list, jump opcode, jump address)
[]자료구조
[]소프트웨어 마에스트로 지원하기 (자기소개서 2월 18일 안까지 작성하기)
[]리눅스 바이너리 메모리보호 기법 간파하기( ex. . . PIE format)
[]Linux kernel 분석
=> 바이너리를 분석을 어떻게 할것인가, 실행흐름은 어떻게 판단할 것인가.
아래는 그냥 공부하다가 새로운거 추가한건데 글거올때 딸려옴.
Addressing Modes
Here are some examples of the allowed addressing modes:
xor cx, [59507] ; Direct mode (XOR CX with word at DS:E873)
push word [bx] ; Register-indirect mode (Push word at DS:BX onto stack)
mov ax, [bp-4] ; Base mode (Move word at SS:(BP-4) into AX)
sub [si+2], bx ; Indexed mode (Subtract BX from word at DS:(SI+2))
not byte [bp+di] ; Base-indexed mode (Invert bits of byte at SS:(BP+DI))
add [bx+si+2], dx ; Base-indexed mode with dispacement (Add DX to word at DS:(BX+SI+2))
The five addressing modes available are outlined more precisely for your reference below:
Direct Mode: [constant]
constant: 16-bit unsigned value
Register-Indirect Mode: [register]
register: bx, si, or di
Note: bp technically isn't allowed. If used, assembler will generate [bp+0] instead.
Base Mode: [constant + baseReg]
constant: 8-bit or 16-bit signed value
baseReg: bp or bx
Indexed Mode: [constant + indexReg]
constant: 8-bit or 16-bit signed value
indexReg: si or di
Base-Indexed Mode: [baseReg + indexReg]
baseReg: bp or bx
indexReg: si or di
Base-Indexed Mode with Displacement: [constant + baseReg + indexReg]
constant: 8-bit or 16-bit signed value
baseReg: bp or bx
indexReg: si or di
void putdata(pid_t child, long addr, char *str, int len)
{ char *laddr;
int i, j;
union u {
long val;
char chars[long_size];
}data;
i = 0;
j = len / long_size;
laddr = str;
while(i < j) {
memcpy(data.chars, laddr, long_size);
ptrace(PTRACE_POKEDATA, child, addr + i * 4, data.val);
++i;
laddr += long_size;
}
j = len % long_size;
if(j != 0) {
memcpy(data.chars, laddr, j);
ptrace(PTRACE_POKEDATA, child, addr + i * 4, data.val);
}
}
'Debugger' 카테고리의 다른 글
[ 32bit ELF Debugger ] 디스어셈블리러(disassembler), 디버거(debugger) 제작 일지2 (0) | 2019.02.20 |
---|---|
[debugger] 32bit binary disassembler 개발일지 (0) | 2019.01.14 |
ModR/M 바이트에서 Mod+R/M과 Reg와의 목적지(순서) 구분 & SIB 바이트 작성법 (0) | 2018.12.15 |
인텔 기계어 정리 (1) | 2018.12.13 |
[디버거] ELF Parser 개발일지 .symbol내의 심볼 출력 (0) | 2018.12.04 |
Comments