#include "stdio.h" #include "elf.h"
void main() { Elf32_Ehdr elf_header; unsigned char magic[] = {0x7f,0x45,0x4c,0x46,0x01,0x01,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; int vma_addr = 0xA4000000; FILE *output = NULL;
memcpy(elf_header.e_ident, magic, sizeof(magic)); elf_header.e_type = ET_EXEC; elf_header.e_machine = EM_SH; elf_header.e_version = EV_CURRENT; elf_header.e_entry = vma_addr; elf_header.e_phoff = 0; elf_header.e_shoff = 0; elf_header.e_flags = EM_SH; elf_header.e_ehsize = sizeof(elf_header); elf_header.e_phentsize = 0; elf_header.e_phnum = 0; elf_header.e_shentsize = 0; elf_header.e_shnum = 0; elf_header.e_shstrndx = 0;
output = fopen("elfheader.bin","wb"); fwrite(&elf_header, sizeof(Elf32_Ehdr), 1, output); fclose(output);
}
혹시나 해서 꼼지락 대면서 gdb load 명령을 이용하여 프로그램 업로드 하기 위해
꽁수를 부려 봤는데.. 이정도 ELF 정도로는 속아주질 않는다 ㄱ-
아이디어 : load 시에 not an object file: File format not recognized 메시지는
즉, ELF 포맷에 맞추어 제대로 된 헤더만 맞추어 주면
원하는 메모리 번지로 임의의 파일을 올릴 수 있지 않을까?
결과 : 니미 ㄱ-
2009/02/16 - [회사일] - sh4-linux-gdb 의 load 명령어
'프로그램 사용 > gdb & insight' 카테고리의 다른 글
GDB Insight FAQ - support target list (0) | 2009.06.26 |
---|---|
insight - GDB GUI frontend (0) | 2009.06.26 |
gdb야 좀 대충 속아라~ 응?! 아 쫌! (6) | 2009.06.18 |
gdb 한글 문서 (0) | 2009.06.18 |
gdb 기동시 xterm 에러 - STLinux (2) | 2009.04.09 |
sh4-linux-gdb 의 load 명령어 (0) | 2009.02.16 |
댓글을 달아 주세요
비밀댓글입니다
2016.04.03 08:49 [ ADDR : EDIT/ DEL : REPLY ]다른 것 보다는.. 동적이던 정적이던, 그 라이브러리가 디버깅용 정보를 포함하지 않을 경우(strip 이라던가.. -pg 라던가) 브레이크가 걸리지 않는 걸로 알고 있습니다.
2016.04.03 19:31 신고 [ ADDR : EDIT/ DEL : REPLY ]stip 하지 않으시거나 디버깅이 가능한 so 라이브러리를 사용하시면 가능하지 않을까 합니다.
개발자 들이 디버깅을 할수 있도록 라이브러리 파일을 만든것은 절대 아닐테고 아무래도 구차니님이 생각하신 명령어 몇개가 추가 된걸로 생각합니다. 이 같은 경우는 동적 디버깅으로 라이브러리 파일을 읽어올순 없는건가요? 주소는 읽어온것 같은데 아무래도 안에 내용이 보이질 않네요 ;ㅁ;
2016.04.03 21:06 신고 [ ADDR : EDIT/ DEL ]우분투를 사용해서 .. 우분투를 기준으로 말씀드리자면
2016.04.03 22:12 신고 [ ADDR : EDIT/ DEL ]-dbg 라고 붙는 패키지가 있습니다. 이런녀석들로 하면 디버그 심볼들이 있어서 가능하지 않을가 합니다.
https://wiki.ubuntu.com/Debug%20Symbol%20Packages
비밀댓글입니다
2016.04.03 22:29 [ ADDR : EDIT/ DEL : REPLY ]제가 JNI를 해본적이 없어서 모르겠습니다만.. JNI에서 호출한 라이브러리만 gdb로 디버깅 하시려는건가요? 아니면 java 자체를 gdb로 디버깅을 하시는건가요?
2016.04.04 09:10 신고 [ ADDR : EDIT/ DEL ]아무튼.. jni 라이브러리가 c언어로 된 녀석이라면... 프로세스로 gdb에서 붙여서 디버깅을 해야하나 싶습니다만.. 자바라면.. 제가 자바랑 안친해서 ㅠㅠ
그리고 동적의 경우 윈도우는 dll 을 통해서 사용하는 방법 리눅스는 so를 통해서 사용하는 방법인데 해당 파일을 링크 해서
파일 포인터를 얻어 쓰는 개념이라.. 하는 방법만 보고 직접 구현해서 써본적은 없습니다.
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
dlopen() / dlsym() 함수를 찾아 보시기 바랍니다.