网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月20日漏签0天
汇编吧 关注:45,338贴子:164,451
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 10回复贴,共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内.
也可以用调试器查看一下栈针在过程中是否保持平衡


2026-05-20 20:52:45
广告
不感兴趣
开通SVIP免广告
  • 活宝单身汪一枚
  • 基础知识
    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
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 10回复贴,共1页
<<返回汇编吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示