首页
社区
课程
招聘
[求助][求助][求助]有懂x64汇编的吗?帮忙看一下这个代码
发表于: 2015-2-25 20:38 5470

[求助][求助][求助]有懂x64汇编的吗?帮忙看一下这个代码

2015-2-25 20:38
5470
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE

push rbp
push rbx
push rsi
push rdi
mov rbp,rcx
call @F
dq 0
@@:
pop rbx
mov rcx,rbp
mov rdx,1
call QWORD ptr[rbx]
mov rdi,rax
mov rcx,rbp
mov rdx,2
call QWORD ptr[rbx]
mov rsi,rax
@@:
cmp rsi,0
jz @F
lea rdx,QWORD ptr[rsi+2]
mov rcx,rbp
call QWORD ptr[rbx]
push rax
dec rsi
jmp @B
@@:
mov rcx,rbp
mov rdx,2
call QWORD ptr[rbx]
mov rsi,rax
cmp rsi,0
jz @F
pop rcx
dec rsi
cmp rsi,0
jz @F
pop rdx
dec rsi
cmp rsi,0
jz @F
pop r8
dec rsi
cmp rsi,0
jz @F
pop r9
dec rsi
@@:
call QWORD ptr[rdi]
mov rdi,rax
add rsp,[rsi*8]
call @F
dq 0
@@:
pop rbx
call QWORD ptr[rbx]
mov rsi,rax
call @F
dq 0
@@:
pop rbx
mov rcx,rbp
mov rdx,rsi
call QWORD ptr[rbx]
mov rcx,rbp
mov rdx,rdi
call QWORD ptr[rbx]
mov rax,2
pop rdi
pop rsi
pop rbx
pop rbp
ret

OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你想表达什么意思
2015-2-25 20:53
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这段代码怎么一运行就报错。退出
2015-2-25 20:59
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
千万别沉了。求大神啊
2015-2-25 21:20
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你的目的是什么啊
2015-2-25 23:07
0
雪    币: 72
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Solaris与window x64调用规范   solaris内核反汇编工具 希望版主开设相关主题
2015-2-25 23:20
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
当然是让这段代码跑起来啊。关键是我现在编译可以通过,但是一运行就报错。
2015-2-25 23:26
0
雪    币: 443
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我是菜鸟,没尝过X64汇编,下面说说我粗看一下理解出错的原因,理解的不对的请指正。
push rbp
push rbx
push rsi
push rdi
mov rbp,rcx
call @F
dq 0        ;预留8字节,保存CALL地址的,初始为0
@@:
pop rbx
mov rcx,rbp
mov rdx,1
call QWORD ptr[rbx]        ;内存间接寻址,由于上面初始为0,没写入正确的地址直接访问会造成访问0地址异常
mov rdi,rax
mov rcx,rbp
mov rdx,2
call QWORD ptr[rbx]
2015-2-26 01:08
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我运行的时候有去填充 dq 0 啊,我是先填充API地址到dq;然后再运行代码
2015-2-26 21:49
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
天哪,来人啊。怎么就没搞x64汇编的啊
2015-2-27 14:53
0
雪    币: 443
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
可能是以下2种原因造成:
1、代码段没有可写属性,在你填充时发生异常。
2、你填充的地址不正确或参数不正确。
2015-2-27 17:18
0
雪    币: 1904
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
64位系统堆栈不是有个页对齐嘛!
2015-2-27 17:38
0
雪    币: 1904
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
还有函数在调用前要抬高栈顶,不然RCX RDX这些参数放哪啊。
2015-2-27 17:55
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢大家。已经解决了。
把call QWORD ptr[rdi]改成call rdi。
2015-3-1 22:50
0
游客
登录 | 注册 方可回帖
返回
//