首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修复DLL中64位截断的MASM

修复DLL中64位截断的MASM
EN

Stack Overflow用户
提问于 2012-02-16 00:35:18
回答 1查看 660关注 0票数 13

通过将加载到我的C++程序中,我正在使用它。ocx应该是64位,但由于某种原因,当我使用x64平台编译时,它会出现问题。我已经阅读了这方面的内容,并发现某些函数很可能通过某种结构接收DWORD userData而不是void* userData,然后将其转换为对象指针。这在32位环境中工作正常,但在64位环境中崩溃。

导致崩溃的ocx内部函数调用的反汇编如下所示:

代码语言:javascript
运行
复制
mov         ecx,r8d 

第一个操作只复制低32位从R8DECX (ECX是32位).

代码语言:javascript
运行
复制
cmp         dword ptr [rcx+11BCh],0 

第二个操作访问64位寄存器,其中低32位包含正确的地址,高32位包含一些垃圾。当然会导致坠机。

溶液

据我所知,一种可能的解决办法是做以下工作:

  1. 创建包含以下代码的asm文件:

nop mov ecx,r8d cmp dword ptr rcx+11BCh,0 nop mov rcx,r8d // I用rcx替换ecx,这里cmp dword ptr rcx+11BCh,0

  • 使用此asm文件构建obj文件,并使用十六进制编辑器对obj文件进行定位,定位Flash中代表nop

  • 的90's,找到nops之间的第一个字节串,并用nops之后的新字节字符串替换它。这将将其从32位更改为64位函数调用。

问题

我尝试使用以下asm文件并使用ml64.exe构建它(我没有masm.exe,但我认为ml.exe是它的新32位版本,这段代码只能使用ml64.exe构建,可能是因为64位运算符吗?):

代码语言:javascript
运行
复制
TITLE: Print String Assembly Program (test.asm)

.Code
main Proc
nop 
nop 
nop 

mov ecx,r8d 
cmp dword ptr [rcx+11BCh],0 

nop 
nop 
nop 

mov rcx,r8   
cmp dword ptr [rcx+11BCh],0 

main ENDP
END

在第二节将r8d更改为r8之前,我在构建它时遇到了困难(我一直收到关于指令长度匹配的错误)。

我要构建这个obj,并使用十六进制编辑器打开它,并能够找到这两个字节字符串。但我的问题是,当我搜索应该在闪存ocx中的第一个字节字符串时,我找不到它。它不在那里,所以我不能用第二个代替它。

我做错了什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-08 20:22:16

  1. 创建包含以下代码的asm文件:

nop mov ecx,r8d cmp dword ptr rcx+11BCh,0 nop mov rcx,r8d // I已经用rcx替换了ecx,cmp dword ptr rcx+11BCh,0

  • 使用该asm文件构建obj文件,MASM.exe

  • 使用十六进制编辑器打开obj文件,并定位Flash中代表nop

  • 的90级字节,找到nops之间的第一个字节串,并用nops之后的新字节串替换它。这将将其从32位更改为64位函数调用。

我创建了以下asm文件并使用ml64.exe构建它

代码语言:javascript
运行
复制
TITLE: Print String Assembly Program (test.asm)

.Code
main Proc
nop 
nop 
nop 

mov ecx,r8d 
cmp dword ptr [rcx+11BCh],0 

nop 
nop 
nop 

mov rcx,r8   
cmp dword ptr [rcx+11BCh],0 

main ENDP
END

我要构建这个obj,并使用十六进制编辑器打开它,并能够找到这两个字节字符串。我在Flash中找到了第一个字节字符串,并将其更改为第二个字节字符串。(唯一的实际变化是字符串中的41比49 )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9303865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档