binfmt_elf.c中的函式移到binfmt_pe.c中就跑不通?

s11show_163 發表於 2020-12-04

一模一樣的load_elf_binary函式移到其他檔案裡就跑不通?
這是因為#include<linux/elf.h>會將loc預編譯
在這裡插入圖片描述
elfhdr這個在elf.h預定義:
在這裡插入圖片描述

可以看到首先要滿足ELF_CLASS == ELFCLASS32才能被賦值成elf32_hdr,否則的話會被賦值成elf64_hdr,
所以一直到binfmt_pe.c裡面的時候實驗論證ELF_CLASS不是ELFCLASS32於是elf_hdr被賦值成了64位的,導致loc->elf_ex被從bprm->buf強制轉化過來的時候是64位的,而binfmt_elf.c裡面同樣的一句話卻是52位的,導致64位的elf_ex的有些欄位過不去load_elf_binary2裡面的一些判斷於是search_binary_loader在遍歷這個fmt->load_binary的時候失敗於是遍歷load_elf_binary,走的是load_elf_binary函式執行操作。
下面的問題是探討ELF_CLASS在哪裡被呼叫的,修改這歌ELF_CLASS