相关疑难解决方法(0)

如何在Windows下的汇编程序中编写hello world?

我想在Windows下编写基本的程序集,我正在使用NASM,但我无法正常工作.

如何在Windows上没有C函数的帮助下编写和编译hello world?

x86 assembly winapi nasm

84
推荐指数
8
解决办法
14万
查看次数

如何手动创建可执行的.exe PE文件?

在解释词法分析器和解析器之后,关于如何创建编译器的所有文本都会停止.他们没有解释如何创建机器代码.我想了解端到端流程.

目前我的理解是,Windows exe文件格式称为Portable Executable.我读到了它的标题,我还没有找到一个可以轻松解释这个问题的资源.

我的下一个问题是,我没有看到任何解释机器代码如何存储在文件中的资源.是否像32位固定长度指令一样接一个地存储在该.text部分?

有没有地方至少解释如何创建一个什么都不做的exe文件(它有一个No Op指令).然后我的下一步是链接到dll文件以打印到控制台.

windows compiler-construction linker executable portable-executable

21
推荐指数
1
解决办法
5678
查看次数

为什么编译器将数据放在PE和ELF文件的.text(code)部分中,并且CPU如何区分数据和代码?

所以我参考这篇论文:

二进制搅拌:旧版x86二进制代码的自随机指令地址

https://www.utdallas.edu/~hamlen/wartell12ccs.pdf

代码与数据交织:由于性能原因,现代编译器在PE和ELF二进制文件的代码段中积极插入静态数据。在编译的二进制文件中,通常没有办法将数据字节与代码区分开。不经意地将数据与代码随机化会破坏二进制文件,从而给指令级随机化器带来困难。可行的解决方案必须以某种方式保留数据,同时随机化所有可访问的代码。

在此处输入图片说明

但我有一些问题:

  1. 如何提高程序速度?我只能想象这只会使cpu的执行更加复杂吗?

  2. CPU如何区分代码和数据?因为据我所知,除非有跳转类型的指令,否则cpu将以线性方式依次执行每个指令,那么cpu怎么知道代码中的哪些指令是代码,哪些指令是数据?

  3. 考虑到代码部分是可执行的,并且CPU可能会错误地将恶意数据作为代码执行,这对安全性是否非常不利?(也许攻击者将程序重定向到该指令?)

cpu x86 reverse-engineering elf compiler-optimization

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

用于了解Windows中正在运行的进程的布局(段)的任何工具?

我一直很好奇

  1. 过程在内存中的确切程度如何?
  2. 它中有哪些不同的部分(部分)?
  3. 程序(在磁盘上)和进程(在内存中)究竟是如何相关的?

我之前的问题:关于可执行程序的内存布局的更多信息(进程)

在我的追求中,我终于找到了答案.我发现这篇优秀文章清除了我的大部分疑问:http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html

在上面的文章中,作者展示了如何获取进程的不同部分(LINUX)并将其与相应的ELF文件进行比较.我在这里引用这一节:

很有可能看到流程细分的真实布局?我们可以使用/ proc // maps文件来显示它.是我们想要观察的过程的PID.在我们继续之前,我们在这里遇到一个小问题.我们的测试程序运行得如此之快,以至于我们甚至可以转储相关的/ proc条目.我用gdb来解决这个问题.您可以使用另一个技巧,例如在调用return()之前插入sleep().

在控制台(或xterm等终端模拟器)中执行:

$ gdb test
(gdb) b main
Breakpoint 1 at 0x8048376
(gdb) r
Breakpoint 1, 0x08048376 in main ()
Run Code Online (Sandbox Code Playgroud)

按住这里,打开另一个控制台,找出程序"测试"的PID.如果您想要快速方式,请键入:

$ cat /proc/`pgrep test`/maps
Run Code Online (Sandbox Code Playgroud)

你会看到如下的输出(你可能得到不同的输出):

[1]  0039d000-003b2000 r-xp 00000000 16:41 1080084  /lib/ld-2.3.3.so
[2]  003b2000-003b3000 r--p 00014000 16:41 1080084  /lib/ld-2.3.3.so
[3]  003b3000-003b4000 rw-p 00015000 16:41 1080084  /lib/ld-2.3.3.so
[4]  003b6000-004cb000 r-xp 00000000 16:41 1080085  /lib/tls/libc-2.3.3.so
[5]  004cb000-004cd000 r--p 00115000 16:41 1080085  /lib/tls/libc-2.3.3.so
[6]  004cd000-004cf000 rw-p 00117000 …
Run Code Online (Sandbox Code Playgroud)

windows linker operating-system process loader

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