Assembly 功能存储器地址(ASM)
我用VB反编译器反编译了一个程序,它说我的目标函数(我想看到代码的那个)位于地址0x00617B70。因此,一旦我拆解了应用程序,我就会转到该内存地址,我看到:Assembly 功能存储器地址(ASM),assembly,vb6,x86,disassembly,Assembly,Vb6,X86,Disassembly,我用VB反编译器反编译了一个程序,它说我的目标函数(我想看到代码的那个)位于地址0x00617B70。因此,一旦我拆解了应用程序,我就会转到该内存地址,我看到: CALL 0861BBA1 ADD BYTE PTR [EAX], DH IN AL, 0 XOR AL, 0 ADD BYTE PTR [EAX], AL ADD BYTE PTR [EAX], AL ADD BYTE PTR [EAX], AL
CALL 0861BBA1
ADD BYTE PTR [EAX], DH
IN AL, 0
XOR AL, 0
ADD BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
SBB BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
SBB AL, 0
ADD BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
ADD AL, 0
ADD BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
OR AL, FF
ADD EAX, DWORD PTR [EAX]
JE 00617B99
ADD DWORD PTR [EAX], EAX
INSB
INC DWORD PTR [EBX]
ADD BYTE PTR [EAX-1], DH
ADD EAX, DWORD PTR [EAX]
AND BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
ADD BYTE PTR [EAX], AL
ADD EAX, 0
ADD BYTE PTR [EAX-1], AL
ADD DWORD PTR [EAX], EAX
INC ESP
INC DWORD PTR [EBX]
ADD BYTE PTR [EAX-1], BL
ADD AL, BYTE PTR [EAX]
XOR BH, BH
ADD AL, BYTE PTR [EAX]
ADC BH, BH
ADD AL, BYTE PTR [EAX]
INSB
OR AL, 0
OR BYTE PTR [EAX], CL
ADD BYTE PTR [ESI], AL
INC EAX
ADD BYTE PTR [EAX+71], AL
PUSHAD
--
SHL BYTE PTR [EAX-1], 1
PUSH ES
ADD AH, BH
ADC AL, 8
OR BYTE PTR [EAX], AL
MOV DWORD PTR [EAX+6E70AD00], EAX
--
SHL BYTE PTR [EAX-1], 1
POP ES
ADD AH, BH
ADC AL, 8
OR BYTE PTR [EAX], AL
MOV DWORD PTR [EDX+6C70AD00], EAX
JMP FAR FWORD PTR [EBX+6E]
这看起来不像一个函数,对吗?我对ASM一无所知,但我希望有这样的情况:
PUSH EBP
MOV EBP, ESP
SUB ESP, 8
...more stuff here...
RETN
特别是RETN
指令说它是关于函数的,对吗
知道我做错了什么吗?在我看来,您的主要错误是认为这应该是x86 CPU代码。相反,VB反编译器得到并显示的代码是一种中间机器字节码,它不是由CPU本身执行的,而是由中间解释器执行的。(如果您已经知道了,很抱歉,但是您的问题还不清楚。)这是JVM、.NET运行时等的主要方法。通过谷歌搜索列表中的一些单词(FStStrCopy、CBoolVarNull)会给出提示,这是特定于VB的P代码。而且它显然不会公开像“mov ebp,esp”或“retn”这样的指令;即使一个代码是这样解码的,这也将是显而易见的,而不是故意的结果。即使您知道某个东西有一个入口点,这个入口点也不是由CPU处理的,而是由P代码解释器处理的
因此,要解决这个问题,您应该确定在分析的二进制文件中使用p代码的确切位置以及本机代码的位置(如果应该)。如果您认为应该是本机代码,则说明您的分析方法和/或编译选项有问题。您可以显示可执行文件反汇编的相关部分吗?内存区域的反汇编几乎肯定是数据,因此不打算执行。反编译的代码也是。
add[eax],al
为0。你拆错东西了。对不起,我还不明白。拆卸的相关部分有哪些?当我在第一个ASM行>选择函数中右键单击时,该代码是MHS6.1自动选择的代码。您说您已使用VB decompiler进行反编译。您确定您的可执行文件是用VB语言编写的吗?是的,100%确定。vbdecompiler可能为函数显示了错误的地址?您好,谢谢您的回答。我不希望VBDecompiler向我显示“mov ebp、esp”或“retn”之类的指令。我希望拆解能让我明白这一点。第一个代码是反汇编代码,最后一个是P代码,它为我提供了VBDecompiler。正如我在其他评论中所说,在反编译其他程序时,我只需复制VBDecompiler中显示的地址,然后转到反汇编程序获取该地址;在那里,它向我展示了我所期望的mov-ebp、esp
以及最后的retn
指令。我不明白为什么在一些节目中它向我展示了我的期望,而在其他节目中却没有