基本上,我想要做的是找到PE文件的最后一部分.我非常认真地阅读了PE规范,但我无法发现我的代码失败的地方.
PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)buffer;
PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)(pidh + pidh->e_lfanew);
PIMAGE_FILE_HEADER pifh = (PIMAGE_FILE_HEADER)&pinh->FileHeader;
PIMAGE_OPTIONAL_HEADER pioh = (PIMAGE_OPTIONAL_HEADER)&pinh->OptionalHeader;
PIMAGE_SECTION_HEADER pish = (PIMAGE_SECTION_HEADER)(pinh + sizeof(IMAGE_NT_HEADERS) + (pifh->NumberOfSections - 1) * sizeof(IMAGE_SECTION_HEADER));
Run Code Online (Sandbox Code Playgroud)
buffer是包含加载的可执行文件的字节数组,pish是指向最后一节的指针.出于某种原因,似乎部门的数量超过20 000.
有任何想法吗 ?提前致谢
我有一个为C程序开发源分析工具的任务,我需要在分析之前预处理代码.我想知道什么是最好的图书馆.我需要轻巧便携的东西.
我如何使用C在linux中执行此操作?我需要编写使用wget下载更新的更新功能,然后用更新替换旧文件,然后启动更新文件.一个想法是使用bash脚本,但没有成功.有什么建议?
编辑:这里的代码与我尝试的类似
char *p_name = "example"; /* name of the running executable */
void update(char *update_url)
{
if(!fork())
/* download file to temporary location */
execlp("wget", "wget" "-q", update_url, "-O", "tmp", NULL);
wait(NULL);
FILE *fp = fopen("tmp.sh", "w");
/* write bash script */
fprintf(fp, "sleep 5\nmv tmp %s\nchmod +x %s\nrm tmp.sh",
p_name, p_name);
fclose(fp);
execlp("bash", "bash", "tmp.sh", NULL);
}
Run Code Online (Sandbox Code Playgroud)