小编Kij*_*jan的帖子

加载PE标头

基本上,我想要做的是找到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 winapi portable-executable

5
推荐指数
1
解决办法
1万
查看次数

C预处理器库

我有一个为C程序开发源分析工具的任务,我需要在分析之前预处理代码.我想知道什么是最好的图书馆.我需要轻巧便携的东西.

c c-preprocessor

4
推荐指数
1
解决办法
1428
查看次数

linux覆盖运行二进制文件

我如何使用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)

c linux

2
推荐指数
1
解决办法
2053
查看次数

标签 统计

c ×3

c-preprocessor ×1

linux ×1

portable-executable ×1

winapi ×1