首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序集中变量访问(MASM32)

程序集中变量访问(MASM32)
EN

Stack Overflow用户
提问于 2017-02-11 05:27:37
回答 1查看 314关注 0票数 2

作为一个安全大学的项目,我应该编写一个体育感染程序。但是我是一个程序集的初学者,因为我不知道如何处理变量,所以我有多次崩溃。

我知道,在常规程序中,我们有一个用于初始化变量的.data部分,以及用于未初始化变量的.data?部分。

但是在这种情况下,每个教程似乎都同意应该在.code部分中定义变量。

这导致了这样的结果:

代码语言:javascript
复制
.386
.model flat, stdcall
option casemap:none
include \masm32\include\masm32rt.inc
.code
start:
    mov stuff, 1
    ret


stuff dd ?

end start

不幸的是,这会导致分割错误,我不知道原因。

另一个例子是:

代码语言:javascript
复制
.386
.model flat, stdcall
option casemap:none
include \masm32\include\masm32rt.inc
.code
start:
    invoke  MessageBoxA, 0, offset hello, offset hello, MB_OK
    ret


hello  db      "Hello buddy", 0

end start

这一个没有编译,因为hello变量在编译时是未知的,这在我看来是合理的,但是.路是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-11 15:37:33

大多数操作系统不允许写入代码段,这是其恶意软件保护的一部分。使得感染代码变得更加困难。:-)

invoke是一个宏,它可能必须在编译时看到它的所有参数,因此可以正确地展开它。它不能很容易地使用代码后面出现的东西,所以您必须确保它出现得更早。例如,在这里,hello的地址将取决于宏展开的大小。

对数据的引用,如在您的mov stuff,1中,有一个固定的大小,可以在以后进行修复。也许在第二次通过汇编程序,或由链接器。

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

https://stackoverflow.com/questions/42172573

复制
相关文章

相似问题

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