如何解决有关编写可执行文件打包程序的两个问题
我试图用C ++编写我的第一个PE包装器,我对PE进行了很好的学习,现在我想开始以纯汇编形式编写存根,但是我有两个问题。
-
如果我编译非常短的汇编代码(如2行代码),则当我们打开exe文件时,操作系统会尝试将这些行复制到ram的可用空间中,然后将指针设置为起点使用指令指针(IP)?在这种情况下,由于纯汇编语言,os仅尝试执行此操作吗?
-
我要对所有其他部分进行XOR运算,并将所有这些数据保留在dummysection1中,并将我的纯汇编代码保留在dummysection2中,并将入口点的地址更改为dummysection2,但是我有什么小问题,我应该添加更多在ram中空格并在RVA中运行此代码,并使用纯汇编对RVA其他部分上的dummysection1数据进行XOR,然后跳转到OEP?
解决方法
我将回答您的问题的一部分,这是Stack Overflow的主题:
如果我编译非常短的汇编代码(如2行代码),则当我们打开exe文件时,操作系统会尝试将这些行复制到ram的自由空间中,然后使用指令指针将指针设置为起点(IP)?在这种情况下,由于纯汇编语言,os仅尝试执行此操作吗?
当您编译(实际上是“汇编”)汇编代码时,它将成为二进制可执行代码,有时也称为“目标代码”或“机器代码”。这是从文本汇编语言到处理器可执行的更有效包装(但不是真正的人类可读)代码的某种直接的翻译。
如果您随后将该机器代码链接到一个可执行文件中,它将被放置在文件中标记为“文本段”或“代码段”的部分。请勿混淆,尽管有名称,但“文本”段并不是真正的字符串。有关更多信息,请参见:https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/february/inside-windows-win32-portable-executable-file-format-in-detail,其中描述了Win32可执行文件格式,包括可执行代码所在的位置。
当操作系统(或更准确地说,是加载程序)运行您的可执行文件时,它将(至少部分)可执行代码复制到RAM中,将程序计数器(也称为指令指针)设置为约定为已知的位置,然后您的代码将从那里运行,直到将控制权交还给操作系统为止,或者直到操作系统由于运行时间太长或发生了某些不良情况而获得控制权为止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。