网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月15日
漏签
0
天
汇编吧
关注:
45,297
贴子:
163,511
看贴
图片
吧主推荐
游戏
9
回复贴,共
1
页
<<返回汇编吧
>0< 加载中...
求助
为什么执行printf的时候段错误了
只看楼主
收藏
回复
___祤
基础知识
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
如果把15或16行其中一行注释掉的话,printf会输出buffer的内容并正常结束程序;如果把15和16行都注释掉,并在printf前一行加入subq $8,%rsp的话,会输出buffer的内容并正常结束程序。
如果没有上述操作则会段错误(废话,不然我问什么……)
另外,我是用gcc -g -no-pie main.s 编译的。
ZandraWoo
数据结构
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
应该是栈针不平衡,64bit的call原则上调用前后最好保留28h或以上的栈空间(看参数多少),以push作参数传递也算在这28h内.
也可以用调试器查看一下栈针在过程中是否保持平衡
活宝单身汪一枚
基础知识
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
请问环境怎么搭建的
活宝单身汪一枚
基础知识
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我搞了一周还没搞好。吐了。win11太难了
ZandraWoo
数据结构
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
标准的64bit程式,调用子程序时,前四个参数必须是,rcx,rdx,r8,r9,若有更多参数,第5个起才由栈传递,下面以MessageBoxA作例子.
Main PROC
sub rsp,28h
mov r9,MB_OKCANCEL
mov r8,OFFSET szTitle
mov rdx,OFFSET szText
sub rcx,rcx
call MessageBoxA
add rsp,28h
ret
Main ENDP
为什么要在调用子程序前加28h,这是为主程式保留足够的空间给参数使用,并且使栈框对齐16字节(cpu要求),其实就是4个参数空间(4x8=32,20h),再加8字节的返回地址,程式才不会当掉.
若参数个数多于4,空间要求更多,下面是参数个数和保留空间.
个数,保留字节
<=4,28H
5,28H
6,38H
7,38H
8,48H
9,48H
...
...
余此类推,基本是每加2个参数就加10h
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示