35.x64汇编写法(二)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:34.x64汇编写法(一)

上一个内容写了,汇编调用c标准库里的getchar函数,这次写的是c调用汇编

首先说明一下 extern 这个单词,只要有 extern 这个单词就说明当前函数或变量是一个全局的,比如 extern int f; 这个代码,现在在文件1中写 extern int f; 然后文件2中也写 extern int f; ,文件1中把f的值设置成了10,然后在文件2中什么都不写,只写extern int f;这一句,此时f的值会是10,因为是全局的,文件1中的修改影响到了它,函数也一样(可能普通手段没办法修改函数,因为会语法不通过)

c代码

c++ 复制代码
#include <iostream>

// 带着 extern 这个单词就说明从全局中找,带着extern它的如果函数名重复了会出现问题
// 在全局中找一个 addShu ,这个addShu函数实用汇编实现的
extern "C" int addShu(int s1, int s2);
int main() {
	int num = addShu(11, 23);
	printf("num = %d", num);
}

汇编代码,addShu函数的实现

复制代码
.code

	addShu proc
		sub rsp, 100h ; 开辟栈
		xor rax, rax
		mov rax, rcx ; 获取第一个参数给rax
		add rax, rdx ; 第一个参数与第二个参数进行相加
		add rsp, 100h ; 恢复栈
		ret ; 返回
	addShu endp

end

效果图:

然后有一个问题,把num改成从全局的,并把它的值设置成999

汇编代码的修改,正常运行的话,它会返回999

实际上它返回的是 -1892892644

这里直接说答案-1892892644是num的内存地址,怎么发现通过断点,如下图设置断点(鼠标左键单击红色圆的位置就可以设置断点和取消断点)

运行后断点住

然后打开监视窗口

然后可以看到它们俩的值是正常的

然后点击下图红框位置,运行一行代码

然后看到rax的值并不是999

然后写一个 &num 表示取num的内存地址

然后鼠标右击选择以十六进制显示

然后就能发现rax的值是num的内存地址了

这个问题就是这里的mov变成了lea,所以要注意在使用全局变量赋值的时候,多写一句 mov rax,[rax]这样的代码,如下图红框

效果图:

汇编代码

复制代码
extern num:far
.code

	addShu proc
		sub rsp, 100h ; 开辟栈
		xor rax, rax
		mov rax, rcx ; 获取第一个参数给rax
		add rax, rdx ; 第一个参数与第二个参数进行相加

		mov rax, num ; 获取全局变量num
		mov rax,[rax] ; 获取num的值

		add rsp, 100h ; 恢复栈
		ret ; 返回
	addShu endp

end

c/c++代码

c++ 复制代码
#include <iostream>

// 带着 extern 这个单词就说明从全局中找,带着extern它的如果函数名重复了会出现问题
// 在全局中找一个 addShu ,这个addShu函数实用汇编实现的
extern "C" int addShu(int s1, int s2);
extern "C" int num = 999;
int main() {
	num = addShu(11, 23);
	printf("num = %d", num);
}

相关推荐
cpsvps_net10 小时前
美国服务器环境下Windows容器工作负载智能弹性伸缩
windows
甄超锋10 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cpsvps13 小时前
美国服务器环境下Windows容器工作负载基于指标的自动扩缩
windows
网硕互联的小客服15 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
etcix16 小时前
implement copy file content to clipboard on Windows
windows·stm32·单片机
许泽宇的技术分享16 小时前
Windows MCP.Net:基于.NET的Windows桌面自动化MCP服务器深度解析
windows·自动化·.net
非凡ghost17 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
mortimer19 小时前
一次与“顽固”外部程序的艰难交锋:subprocess 调用exe踩坑实录
windows·python·ai编程
gameatp21 小时前
从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)
linux·服务器·windows
穷人小水滴21 小时前
在 windows 运行 flatpak 应用 (WSL)
linux·windows·ubuntu