【问题标题】:add new section to a pe file in c++在c ++中将新部分添加到pe文件
【发布时间】:2016-09-03 19:04:34
【问题描述】:

我在用 C++ 创建一个简单的打包程序时遇到了一些问题。 我需要在 pe 文件中添加新部分来执行此操作我想初始化一个新部分。我在 Visual Studio 2015 中使用以下代码:

PIMAGE_SECTION_HEADER new_section;
new_section->Characteristics = IMAGE_SCN_MEM_WRITE;

但是它给了我 new_section 在没有被初始化的情况下被使用,我该如何解决这个问题?

我想知道我应该如何在初始化后将部分添加到 pe 文件中,我应该使用 memset 函数吗? 感谢您的帮助。

【问题讨论】:

  • 如果 VS 显示错误消息,您能发布确切的消息吗?
  • 在哪里初始化 new_section?无处?这可能是编译器警告你的原因......
  • 我说的很准确
  • 好的,那我应该怎么初始化呢?!

标签: c++ file portable-executable


【解决方案1】:

您没有初始化PIMAGE_SECTION_HEADER 指针(注意它是一个指向结构的指针)。由于它是一个结构体,所以你需要将你的数据转换成它,假设你的数据存储在buffer

PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)buffer;
PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)((BYTE*)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 new_section = (PIMAGE_SECTION_HEADER)((BYTE*)pinh + sizeof(IMAGE_NT_HEADERS));

此用法示例取自here

【讨论】:

  • 我使用了你的代码,它给出了错误:无法从 'PIMAGE_SECTION_HEADER *' 转换为 'PIMAGE_SECTION_HEADER'
  • 对库不熟悉,所以只是问:它有构造函数,还是只是新分配但未初始化的POD?
  • @Uriel Eli 大多数 c++ 代码都使用这个结构,如果我想改变它,它会有点困难,除此之外,我搜索了很多在 c++ 中创建打包程序的好教程,但是没有什么好的教程,只是找了很多零星的资料。
  • @alex 如果你没有给它任何内容,你是如何使用它的?
  • @Uriel Eli 我使用了你提到的类似的东西,但主要问题是我需要添加我自己的部分和我自己的细节,这样做有什么想法吗?!
猜你喜欢
  • 2012-12-16
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多