Pet*_*háč 12 windows winapi executable operating-system exe
我对编译魔术并不熟悉.改造人类可读的代码(或不行为真正可读大会指令)转换成机器代码,对我来说,火箭科学与巫术相结合.
我将把这个问题的主题缩小到Win32可执行文件(.exe).当我在专门的查看器中打开这些文件时,我可以找到分散在不同位置的字符串(通常每个字符16b),但其余的只是垃圾.我认为不可读的部分(大多数)是机器代码(或者可能是资源,例如图像等......).
有没有简单的方法来读取机器代码?将exe作为文件流打开并逐字节读取,如何将这些单独的字节转换为汇编?这些指令字节和汇编指令之间是否有直接的映射?
.exe是如何写的?每条指令四个字节?更多?减?我注意到一些应用程序可以像这样创建可执行文件:例如,在ACD中您可以将一系列图像导出到幻灯片中.但这不一定是SWF幻灯片,ACD See也能够生成EXEcutable演示文稿.怎么做的?
我怎样才能理解EXE文件中的内容?
dre*_*lax 15
OllyDbg是一个很棒的工具,可以将EXE反汇编成可读指令,并允许您逐个执行指令.它还告诉您程序使用哪些API函数,如果可能,还告诉它它提供的参数(只要参数在堆栈中找到).
一般来说,CPU指令长度可变,有些是一个字节,有些是两个,有的是三个,有的是四个等等.它主要取决于指令所期望的数据类型.有些指令是通用的,比如"mov",它告诉CPU将数据从CPU寄存器移动到内存中的某个位置,反之亦然.实际上,有许多不同的"mov"指令,一个用于处理8位,16位,32位数据,一个用于移动来自不同寄存器的数据,等等.
您可以选择Paul Carter博士的PC汇编语言教程,这是一本免费的入门级书籍,介绍了汇编以及Intel 386 CPU的运行方式.其中大部分甚至适用于现代消费者的英特尔CPU.
EXE格式特定于Windows.入口点(即第一个可执行指令)通常位于EXE文件中的相同位置.一次解释所有这一切都很困难,但我提供的资源应该有助于至少治愈你的一些好奇心!:)
小智 6
您需要一个反汇编程序,它将机器代码转换为汇编语言.此Wikipedia链接描述了该过程并提供了免费反汇编程序的链接.当然,正如你所说,你不懂汇编语言,这可能不是很有用 - 你到底想要做什么?
您可以从命令行使用调试,但这很难。
C:\WINDOWS>debug taskman.exe
-u
0D69:0000 0E PUSH CS
0D69:0001 1F POP DS
0D69:0002 BA0E00 MOV DX,000E
0D69:0005 B409 MOV AH,09
0D69:0007 CD21 INT 21
0D69:0009 B8014C MOV AX,4C01
0D69:000C CD21 INT 21
0D69:000E 54 PUSH SP
0D69:000F 68 DB 68
0D69:0010 69 DB 69
0D69:0011 7320 JNB 0033
0D69:0013 7072 JO 0087
0D69:0015 6F DB 6F
0D69:0016 67 DB 67
0D69:0017 7261 JB 007A
0D69:0019 6D DB 6D
0D69:001A 206361 AND [BP+DI+61],AH
0D69:001D 6E DB 6E
0D69:001E 6E DB 6E
0D69:001F 6F DB 6F
Run Code Online (Sandbox Code Playgroud)
您看到的可执行文件是Microsofts PE(可移植可执行文件)格式.它本质上是一个容器,它包含一些关于程序的操作系统特定数据,程序数据本身分成几个部分.例如,代码,资源,静态数据存储在单独的部分中.
该部分的格式取决于其中的内容.代码部分根据可执行目标体系结构保存机器代码.在最常见的情况下,这是针对Microsoft PE二进制文件的Intel x86或AMD-64(与EM64T相同).机器代码的格式是CISC,并且可以追溯到8086及更早版本.CISC的重要方面是它的指令大小不是恒定的,你必须在正确的地方开始阅读以获得有价值的东西.英特尔在x86/x64指令集上发布了很好的手册.
您可以使用反汇编程序直接查看机器代码.结合手册,您可以在大多数时间猜测源代码.
然后是MSIL EXE:.NET可执行文件持有微软中间语言,这些不包含特定于机器的代码,而是包含.NET CIL代码.其规格可在ECMA网站上获得.
可以使用Reflector等工具查看这些内容.
归档时间: |
|
查看次数: |
11950 次 |
最近记录: |