일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 어셈블리어
- doupdate
- wnourefresh
- rfc5508
- edge trigger
- DOCKER-USER
- .nret core 배포
- LOB
- iptables
- .net core 7
- BOF
- ncurses
- REDIS
- architecture
- wrefresh
- mvwin
- Docker
- packet flow
- packet filter
- epoll_wait
- level trigger
- vtable
- Compiler
- epoll
- ioctl
- 취약점
- cbpf
- C언어
- NAPT
- 풀이
- Today
- Total
목록Debugger (7)
Tuuna Computer Science
일단 ToDo 리스트에서 한것은 X표시하고 안한것은 [] 표시로 빈칸을 뒀는데 한것보다 안한게 많네... ㅎ 계속 열심히 달려야지. [x]ELF 중요한 메타데이터 파싱하기 [x]ELF 각 각의 심볼 인덱스 입력시 헥스 덤프 출력 [x]인텔 기계어 형식 정리하기 []PLT, GOT 값 찾아가기 (plt에 있는 라이브러리 함수 이름 체킹) [x]static의 경우 찾기가 조금 어렵네 인덱스 번호가 아니라 함수의 이름만 적어서 찾을 수 있도록 해야겠다. (아니면 FUNC만 출력할 수 있도록할까)[x]헥스 덤프를 통해 나온 값 기계어 형식에 맞춰서 디스어셈하기 []어셈블리로 정의한 함수는 왜 readelf -s binnary 했을 때 보이지 않는가 (size가) []data flow analysis[]symbo..
디스어셈블러랑, 디버거를 이미 다 제작이 완료되었지만 귀차니즘으로 아직 안올렸는데 이제 스타벅스온김에 올리려합니다. ================================================================ ptrace를 활용한 나만의 debugger가 완성되었습니다.ㅎㅎ ! 아직까지 수정하여할 부분이 많지만 초기 완성단계본 올려봅니다. platform:Linux & Unix 계열대상바이너리 : 32bit elf (no-pie)파일 사용법./debugger 명령어 도움말help 치시면 됩니다. [인터페이스] 현재 오류는 메모리덤프와, 레지스터 세팅, 메모리 수정 부분에서 오류가 발생했는데 조만간 고칠예정입니다. (strtok 문제인듯...)(해결) 또한 step over를 아직 ..
몇 몇의 모르는 명령어와 two byte, three byte opcode를 빼곤 대체적으로 완성이 되어 지금까지의 일지를 적으려 한다. ========================================================================= 이제 쓰는 일지 그러니 1월1일 부터 시작하려한다. 1월1일 지금까지 생각해온 디버거 구상을 시작하기로 했다. 여기서 16비트 메모리체계가 아닌 32비트 메모리체계로만 설계하기로 함. 1월 2일 집 근처 스타벅스가서 코드를 작성함. (sib비트와 disp를 처리하는 함수로직 구현) 그리고 학교 파이썬 강좌에서 사요할 피피티 만들기 1월 3일 학교 파이썬 알바에서 약팔고옴. 집에와서 좀 쉬다가 8시부터 코딩... (피피티 ...) 이 시간엔..
개꿀팁인데 Opcode에서 오퍼랜드와 오퍼랜드 사이의 목적지를 구별 짓는 것이 상당히 어려웠다. 어떤 블로그에선 Mod 비트부분에서 11이면 목적지가 레지스터라는데 테스트 결과 조금 개소리였다. (아닐수도) 구글링 결과 Mod부분이 11이면 R/M이 Register임을 알린다. 추가 적으로 Mod부분이 00이라면 뒤엔 Displacement가 따른다. 그래서 고민하다가 구글링 해보았는데 Opcode안에 d라는 비트와 s라는 비트가 숨겨져 있었다! d비트는 전체 1번째 비트에 s비트는 전체 0번째 비트에... ┌──────────────────────────┐ │ │ │ │ │ │ │ d │ s │ ├──────────────────────────┤ d비트는 이 Opcode에 의한 오퍼랜드가 어떤 방향으로..
일단 바이너리의 Opcode를 디스어셈블리하기 전에 일단 바이너리에 쓰여진 Instruction의 형태가 어떻게 구성되어 있는지 부터 알아야 할 것이다. 지금까지 공부한걸 정리할겸 포스팅 ~.~ 기계어의 형식 컴퓨터는 0과 1밖에 모르는 기계이다. 이 기계가 특정 Instruction을 작동시키게 하려면 당연히 0과 1로 이루어진 수로 주어야 한다. 사람의 입장에서는 이 숫자들을 직관적으로 이해하기 어려워 이 Instruction을 바탕으로 mnemonic화 시켰다. 이를 Assembly어라고 한다. 디버거를 만들기 앞서 위에서 정의한 Instruction => Assembly(mnemonic)으로 디스어셈블 해야 하는 것이 목적이다. fix 그럼 Disassemble하기 위해선 Intel의 Instru..
.symtab 섹션에서 확인할 수 있는 symbol들을 구하는데 성공했다. .symtab 섹션과 .strtab 섹션과의 위치를 뺐더니 특정값이 나오는데 그 값에 .symtab에 저장되어 있는 엔트리의 구조체의 크기를 나눈다. 그러면 엔트리(Symbol)의 개수를 구할 수 있다. 그리고 엔트리 구조체의 멤버 변수중에 st_name을 통해 .strtab의 섹션에서의 인덱스값으로 사용하여 symbol들의 이름값을 구할 수 있었다. symbol 구조체중에 st_info의 값이 Type과 Bind의 값이 합쳐진건데 이 st_info값을 ">> 4"해서 Bind값을 구하고, " & 0xf" 연산해서 type값을 구할 수있다. 사용자가 값을 받을 때에는 symbol의 이름을 적는게 아니라 st_name, 인덱스값을 ..
elf header와 elf header의 내용을 바탕으로 섹션 헤더를 출력하는데 성공했다. 이젠 이 섹션 헤더를 바탕으로 .symtab 섹션으로 가서 심볼들을 체크해봐야 겠다. int check_elf(int file) { ssize_t check; char value[16]; int i; int magic=1; lseek(file, 0, SEEK_SET); for(i=0;i 파일이 object파일임을 나타냄. 기계 독립적인 데이터 제공 Elf32_Half e_type; //=> Object 파일의 타입을 표시 Elf_Half e_machine; //=> 아키텍쳐 정보를 표시 (32인지 64인지) Elf_Word e_version; //=> Object 파일의 버전 정보 Elf_Addr e_entry;..