Android ELF 파일 got 테이블 기호 오프셋 확인
우선 내가 구해야겠어.dynsym .dynstr .rel.plt 세 절의 데이터
.rel.plt 및 dynsym의 정의는 다음과 같습니다.
typedef struct{
Elf32_Addr r_offset;
Elf32_Word r_info;
} Elf32_Rel;
typedef structelf32_sym{
Elf32_Word st_name;
Elf32_Addr st_value;
Elf32_Word st_size;
unsignedcharst_info;
unsignedcharst_other;
Elf32_Half st_shndx;
} Elf32_Sym;
얻다.rel.plt 각 재배치 테이블에 해당하는 기호의 단계: 1, ELF32 사용R_SYM 매크로(.rel.plt 매개변수의 r info) 기호는.dynsym의 편향 2, 대응하는 dynsym을 찾으면 가져옵니다.dynsym의stname 필드입니다. 그러나 이 필드는 문자열이 아니라 편이입니다.dynstr 절의 편향 3、편향을 통해 해당하는 기호를 얻을 수 있습니다
다음 코드는 네트워크에서 나온 것으로 got 기호를 찾는 프로그램의 구현입니다.
for (i = 0; i < relplt_shdr->sh_size / sizeof(Elf32_Rel); i++){
uint16_t ndx = ELF32_R_SYM(rel_ent->r_info);
LOGD("ndx = %d, str = %s", ndx, dynstr + dynsymtab[ndx].st_name);
if (strcmp(dynstr + dynsymtab[ndx].st_name, symbol_name) == 0) {
LOGD(" %s got : 0x%x", symbol_name, rel_ent->r_offset);
offset = rel_ent->r_offset;
break;
}
if(read(fd, rel_ent, sizeof(Elf32_Rel)) != sizeof(Elf32_Rel)) {
LOGD(" %s ", symbol_name); return -1; }
}
정적 귀속 기호라면 가져오는 것입니다.dynsym 구조체stvalue 필드의 값
for(i = 0; i < (dynsym_shdr->sh_size) / sizeof(Elf32_Sym); ++i) {
if(strcmp(dynstr + dynsymtab[i].st_name, symbol_name) == 0) {
LOGD(" %s : 0x%x", symbol_name, dynsymtab[i].st_value);
offset = dynsymtab[i].st_value;
break;
}
}
위 코드는 Android GOT 표 HOOK 기술에서 나온 것입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.