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);
}

相关推荐
呉師傅2 小时前
得力P2500、M2500系列打印机硒鼓加粉及清零方法【纯享版】
运维·网络·windows·电脑
ZhangJun953 小时前
从零写一个类鲁大师的硬件检测小工具,软件附上,可直接使用
windows·测试工具·电脑·笔记本电脑·硬件架构
imperialeast5 小时前
创建WAV文件 韩文、德文、俄文等unicode音乐标签
windows·小程序
易点云徐源5 小时前
社保费管理客户端打开后进度条卡20%,等待1分钟提示获取接收配置失败
windows
I'mChloe6 小时前
Windows部署BiliNote:Docker安装、AI视频转写、Markdown笔记与cpolar远程访问
人工智能·windows·docker
AC赳赳老秦7 小时前
数据采集全链路审计留痕:用 OpenClaw 实现合规审计与追溯
开发语言·汇编·python·php·swift·deepseek·openclaw
荣合技术服务7 小时前
EMQX mqtt在 Windows 系统上的安装教程
windows·mqtt·emqx
学逆向的7 小时前
虚拟内存与物理内存
windows·网络安全·api·win32
小小小小钰儿8 小时前
2.1-Windows本地部署大模型
人工智能·windows·计算机·网络安全·操作系统·编程
ayaya_mana8 小时前
MCTier 组网联机工具:安装、配置与私有化部署
网络·windows·内网穿透·联机