首页
社区
课程
招聘
[已解决] [求助]x64汇编代码执行系统system函数报错求助 10雪币
发表于: 2024-9-22 17:13 1696

[已解决] [求助]x64汇编代码执行系统system函数报错求助 10雪币

2024-9-22 17:13
1696

基础环境

win11 专业版
visual studio 2019 Professional

问题

编写x64汇编代码直执行system("dir")函数,其中system函数的地址使用手工查找定位的方式直接确定具体地址。
在汇编调用system函数之前已经加载了msvcrt.dll
使用下面的代码执行system("dir")时,发现必须要先调用push指令进行一次压栈操作,否则弹出的cmd窗口就不显示dir输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
_asm {
        push rbp
        mov rbp, rsp
        sub rsp, 0x20
        push rbx
        xor rax, rax
        mov [rbp - 0x08],rax
        mov al,0x64
        mov [rbp- 0x08],al
        mov al,0x69
        mov [rbp- 0x07],al
        mov al,0x72
        mov [rbp- 0x06],al
        mov al,0x00
        mov [rbp- 0x05],al
        lea rcx,[rbp-0x08]
        xor rbx,rbx
        mov rbx,0x00007FFDD353ABB0
        call rbx
        add rsp,0x20
        pop rbp
    }

疑问点

为什么需要做一次压栈操作?使用代码x64dbg调试发现即使不压栈实际上也进入了system函数中,但是压栈之后就显示dir的内容,否则就不显示。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-9-22 17:20 被L11编辑 ,原因: 增加奖励
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 15028
活跃值: (6233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
传递参数
2024-9-22 18:13
0
雪    币: 211
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
L11
3
问题已找到,栈平衡的原因。需要x64汇编的栈需要做16byte对齐,call指令会入栈一个8byte的地址,打破了栈平衡。
2024-9-22 19:50
0
雪    币: 15028
活跃值: (6233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
仔细看了一下代码,sub rsp,0x20是4个64位寄存器栈空间,也是参数存放空间。再push rbx是存放返回地址。
2024-9-22 20:05
0
雪    币: 15028
活跃值: (6233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
再push rbx是存放返回地址按16字节对齐。如果不push,那么加上返回地址只有40字节,所以再push8字节即为48字节
2024-9-22 20:18
0
雪    币: 211
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
L11
6
tDasm 再push rbx是存放返回地址按16字节对齐。如果不push,那么加上返回地址只有40字节,所以再push8字节即为48字节
是的,没充分理解栈16字节对齐的含义,这下明白了。
2024-9-22 20:33
0
雪    币: 6221
活跃值: (5660)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
7
弱弱的问一句,0x00007FFDD353ABB0这个地址应该不是固定的吧?你这么写,不同版本的系统什么的应该用不了吧,有什么意义吗?SYSTEM不是直接就可以用吗?
2024-9-22 21:44
0
雪    币: 211
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
L11
8
gamehack 弱弱的问一句,0x00007FFDD353ABB0这个地址应该不是固定的吧?你这么写,不同版本的系统什么的应该用不了吧,有什么意义吗?SYSTEM不是直接就可以用吗?
就是为了学习下x64的汇编,结果碰到了这个问题卡壳了。
2024-9-22 23:48
0
游客
登录 | 注册 方可回帖
返回
//