标签: portable-executable

如何在一个确定的地址(gcc,linux)的可执行文件中创建一个"空"空间?

我本来想要做的是让另一个程序将数据写入这个"空白空间",让可执行文件"工作"

我想在应用程序上附加一个签名,然后写入数据,稍后再搜索,但这听起来不太合适......

现在,其他重要的事情......我知道应该可以使用以下代码创建代码洞穴:

void function(void) {
__asm {
nop
nop
nop
nop
};
}
Run Code Online (Sandbox Code Playgroud)

那么,即使这实际上是相同的(除了它将在.data部分,因此不可执行):

const char data[3];
Run Code Online (Sandbox Code Playgroud)

那么问题是另一个应用程序没有明确的地址要写入.

linux executable gcc portable-executable

3
推荐指数
1
解决办法
594
查看次数

Windows可移植可执行文件如何跨机器架构移植

Windows Portable Executables是否真的可以跨机器架构移植?如果是这样,它如何运作?如果不是那么"可移植可执行文件"是什么意思或可执行文件的哪个部分是可移植的?

谢谢,Siva Chandran

windows cpu-architecture portable-executable

3
推荐指数
1
解决办法
483
查看次数

将内核加载到内存中 - 如何自己编写加载程序?

我正在努力在D中制作自己的引导加载程序和内核,而且我遇到了一个绊脚石.

背景:

  • 我从头开始写一切.因此引导扇区处于组装状态.而且我没有使用GRUB.
  • 我正在使用Qemu进行测试.
  • 引导扇区从"磁盘"(当前只是一个平面二进制文件,其第一个扇区是引导加载程序,其余部分是内核代码)读入内核到虚拟地址0xC0000000,并调用kmain(),我的入口点核心.
  • 我正在为我的内核使用PE文件格式.(请不要告诉我使用Elf - 我的选择是PE.)

问题

能够加载PE文件是内核工作的一部分.那么我如何首先将内核本身加载到内存中,以便它可以实际正确执行?

我无法从引导扇区执行此操作,因为(1)它不适合512字节,(2)在汇编时很痛苦.显然,我也无法在内核中做到这一点.那我该怎么做呢?

bootstrapping kernel portable-executable bootloader

3
推荐指数
1
解决办法
2641
查看次数

偏移量和 RVA 之间的区别

相对虚拟地址和相对于文件基址的偏移量有什么区别?

exe portable-executable

3
推荐指数
1
解决办法
3723
查看次数

PE 文件格式 - 节表和第一节之间是什么?

在十六进制编辑器中查看 PE 文件时,我经常遇到节表和第一节之间的一些字节,这对我来说没有意义。就我而言,应该有一个 00 字节的填充以适应对齐。但是,这是一个屏幕截图,它演示了相反的情况:

事实证明,突出显示的块几乎是绑定导入表。但我仍然很困惑。为什么这个表不在一个节中?这是总是如此还是只是某个编译器/链接器的规范?我没有找到有关此特定问题的任何文档。关于这个主题的所有内容基本上都说:

  1. DOS MZ 标头
  2. DOS存根
  3. PE头
  4. 节表
  5. 第 1 节
  6. 第 2 节
  7. 第 3 节

... 等等

在我遇到这个问题之前,我什至不知道这些部分之外可能还有其他东西(当然,除了我上面列出的那些)。

[编辑]

概念证明(因为 Mox 不相信我):

洛德PE

windows executable coff portable-executable

3
推荐指数
1
解决办法
2616
查看次数

PE文件如何映射到内存?

所以我过去几天一直在重新研究PE格式,我还有几个问题

  1. 数据部分是否已映射到进程的内存中,或程序是否从磁盘读取它?

  2. 如果确实将其映射到其内存中,那么该进程如何获取该部分的偏移量?(和其他部分)

  3. 有没有办法获取已经映射到内存中的进程的入口点,而不触及磁盘上的文件?

memory windows portable-executable sections

3
推荐指数
1
解决办法
4038
查看次数

PE文件部分-SizeOfRawData或VirtualSize

最近,我一直在办公室里弄乱PE文件,并且对后台的Windows加载程序的工作很感兴趣。我知道加载PE文件时,加载器需要将PE部分复制到分配的PE内存中,一些加载器提交SizeOfRawData字节,该部分提交VirtualSize字节,有时SectionAlignment(对于未初始化的数据,当SizeOfRawData等于0时)。我的问题是我怎么知道SectionAlignment字节足以容纳该节的所有未初始化数据?也许我有一个比更大的未初始化缓冲区SectionAlignment,那么如何确定它不会覆盖其他部分呢?我可以预测需要分配的大小吗?为了安全起见,我可以提交VirtualSize字节而不是SectionAlignment字节吗?

c windows winapi internals portable-executable

3
推荐指数
1
解决办法
980
查看次数

PE文件中的节和数据目录之间是什么关系?

我试图更好地理解PE格式,并且想知道PE文件中的节与数据目录之间的关系是什么。打开PE文件时,我注意到它们经常重叠,但是我不清楚它们为什么或如何关联,而且Microsoft的官方PE文件格式规范似乎并没有使它变得更清晰。

我知道部分标题的名称值可以更改,因此不能保证对特定块的引用,因此应依赖这些数据目录在文件中查找特定块。

在我打开的一个示例PE文件中,我注意到.text节具有与Import Address Table数据目录头相同的偏移量,尽管IAT大小被列为8,而.text节的大小为6804。相比之下,资源数据目录头声明其起始于16384,长度为1568-精确地与.rsrc节的条目相符。后者对我有意义,而前者则没有。

那么,节与数据目录的不同目的是什么?为什么这两个概念都存在,又为什么有时它们重叠,而这似乎对他们没有意义呢?

windows portable-executable

3
推荐指数
1
解决办法
1116
查看次数

如何在EXE文件的PE头中设置"文件版本"字段?

go build用来构建一个文件.exe然后我查看文件的属性(右键单击文件 - >属性),在detail选项卡中,文件的版本为空.

我如何设置exe文件的版本.

在此输入图像描述

go portable-executable

3
推荐指数
1
解决办法
640
查看次数

如何确定EXE(或DLL)是否参与ASLR,即是否可重定位?

如何确定EXE(或DLL)是否参与ASLR,即是否可重定位?

我想在我的系统上检查一些EXE是否可以重新定位并参与ASLR.

我知道链接器的默认行为是剥离基址重定位,以便EXE不可重定位?

如何从FileAlyzer等工具中看到图像是否参与ASLR?

windows assembly linker portable-executable

3
推荐指数
1
解决办法
1908
查看次数