#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
Posted by 구차니

댓글을 달아 주세요

  1. 비밀댓글입니다

    2016.04.03 08:49 [ ADDR : EDIT/ DEL : REPLY ]
  2. 다른 것 보다는.. 동적이던 정적이던, 그 라이브러리가 디버깅용 정보를 포함하지 않을 경우(strip 이라던가.. -pg 라던가) 브레이크가 걸리지 않는 걸로 알고 있습니다.
    stip 하지 않으시거나 디버깅이 가능한 so 라이브러리를 사용하시면 가능하지 않을까 합니다.

    2016.04.03 19:31 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 개발자 들이 디버깅을 할수 있도록 라이브러리 파일을 만든것은 절대 아닐테고 아무래도 구차니님이 생각하신 명령어 몇개가 추가 된걸로 생각합니다. 이 같은 경우는 동적 디버깅으로 라이브러리 파일을 읽어올순 없는건가요? 주소는 읽어온것 같은데 아무래도 안에 내용이 보이질 않네요 ;ㅁ;

      2016.04.03 21:06 신고 [ ADDR : EDIT/ DEL ]
    • 우분투를 사용해서 .. 우분투를 기준으로 말씀드리자면
      -dbg 라고 붙는 패키지가 있습니다. 이런녀석들로 하면 디버그 심볼들이 있어서 가능하지 않을가 합니다.
      https://wiki.ubuntu.com/Debug%20Symbol%20Packages

      2016.04.03 22:12 신고 [ ADDR : EDIT/ DEL ]
  3. 비밀댓글입니다

    2016.04.03 22:29 [ ADDR : EDIT/ DEL : REPLY ]
    • 제가 JNI를 해본적이 없어서 모르겠습니다만.. JNI에서 호출한 라이브러리만 gdb로 디버깅 하시려는건가요? 아니면 java 자체를 gdb로 디버깅을 하시는건가요?
      아무튼.. jni 라이브러리가 c언어로 된 녀석이라면... 프로세스로 gdb에서 붙여서 디버깅을 해야하나 싶습니다만.. 자바라면.. 제가 자바랑 안친해서 ㅠㅠ

      그리고 동적의 경우 윈도우는 dll 을 통해서 사용하는 방법 리눅스는 so를 통해서 사용하는 방법인데 해당 파일을 링크 해서
      파일 포인터를 얻어 쓰는 개념이라.. 하는 방법만 보고 직접 구현해서 써본적은 없습니다.
      http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
      dlopen() / dlsym() 함수를 찾아 보시기 바랍니다.

      2016.04.04 09:10 신고 [ ADDR : EDIT/ DEL ]