程序非法操作,查看堆栈,发现出错在 add $0x10,%esp(100分)

SpriteLW 2008-06-02 11:18:54
请问这句是什么意思?

具体的代码如下:
804835c: 29 c4 sub %eax,%esp
804835e: 83 ec 0c sub $0xc,%esp
8048361: 6a 01 push $0x1
8048363: e8 dc ff ff ff call 8048344 <_Z3funi>
8048368: 83 c4 10 add $0x10,%esp
804836b: 85 c0 test %eax,%eax

是不是堆栈被破坏了?
...全文
574 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
SpriteLW 2008-06-04
  • 打赏
  • 举报
回复
你看错地方了吧,应该是看0x40073f
充电宝111 2008-06-02
  • 打赏
  • 举报
回复
对啊,光给这些代码不能判断对错的
仅从这些代码看没啥问题
8048368: 83 c4 10 add $0x10,%esp
是处理堆栈指针的,一般都是调用者处理,这没问题
8048363: e8 dc ff ff ff call 8048344 <_Z3funi>
这个函数的代码要贴出来
baihacker 2008-06-02
  • 打赏
  • 举报
回复
上代码...
独孤过儿 2008-06-02
  • 打赏
  • 举报
回复
信息太少了,C代码保密,不能贴出来吗?
独孤过儿 2008-06-02
  • 打赏
  • 举报
回复
俺投降了,不知道问题出在哪里,帧栈看着看着就丢了...

等待高人吧
独孤过儿 2008-06-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 baihacker 的回复:]
你的调试时间达到15分钟了...
[/Quote]
......
独孤过儿 2008-06-02
  • 打赏
  • 举报
回复
貌似执行到这里的时候,执行了HLT指令core掉了...

Disassembly of section .text:

00000000004004f0 <_start>:
4004f0: 31 ed xor %ebp,%ebp
4004f2: 49 89 d1 mov %rdx,%r9
4004f5: 5e pop %rsi
4004f6: 48 89 e2 mov %rsp,%rdx
4004f9: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp
4004fd: 50 push %rax
4004fe: 54 push %rsp
4004ff: 49 c7 c0 50 07 40 00 mov $0x400750,%r8
400506: 48 c7 c1 60 07 40 00 mov $0x400760,%rcx
40050d: 48 c7 c7 d9 06 40 00 mov $0x4006d9,%rdi
400514: e8 8f ff ff ff callq 4004a8 <__libc_start_main@plt>
400519: f4 hlt
40051a: 90 nop
40051b: 90 nop
baihacker 2008-06-02
  • 打赏
  • 举报
回复
你的调试时间达到15分钟了...
独孤过儿 2008-06-02
  • 打赏
  • 举报
回复
先贴个我看到的错误上来:

[root@localhost stack]# gcc -o fun fun.c
[root@localhost stack]# ./fun
stack 0: ./fun [0x40063b]
stack 1: /lib64/libc.so.6 [0x38e3c300a0]
stack 2: ./fun [0x4006b5]
stack 3: ./fun [0x4006d7]
stack 4: ./fun [0x40073f]
stack 5: /lib64/libc.so.6(__libc_start_main+0xf4) [0x38e3c1d8a4]
stack 6: ./fun [0x400519]
Segmentation fault

独孤过儿 2008-06-02
  • 打赏
  • 举报
回复
写别结贴啊,我在调呢...
SpriteLW 2008-06-02
  • 打赏
  • 举报
回复
经实践,造成这个错误不一定是数组越界,也有可能是通空指针附值.

测试代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/file.h>
#include <signal.h>
#include <execinfo.h>
#include <errno.h>
#include <string.h>

int g_run = 1;
void signal_handler(int sig)
{
switch(sig)
{
case SIGTERM:
{
//WRITELOG(DebugLog,"[main] receive signal SIGTERM and stop the VPN server");
signal(SIGSEGV, SIG_DFL);

}
break;
case SIGSEGV:
{
static int nTimes=0;
nTimes++;

if(nTimes==1)
{

//log the stack information
void * array[25];
int nSize = backtrace(array, 25);
char ** symbols = backtrace_symbols(array, nSize);
for(int i = 0; i<nSize; i++)
{
printf("stack %d: %s\r\n",i,symbols[i]);

}
free(symbols);
}
signal(SIGSEGV, SIG_DFL);
}
break;
default:
break;
}
}

int fun(int aa)
{
int *paa=0;
*paa = 0;
//memcpy(paa,"ddf",3);
//int bb = 1;
//int *pRet = &bb+1;
//*pRet = 90;
return 2;
}

int fun2(int bb)
{
return fun(0);
}

int main(int argc,char *argv[])
{
signal(SIGCHLD, SIG_IGN);
signal(SIGSTOP, SIG_IGN);
signal(SIGPIPE,SIG_IGN);
signal(SIGTERM, signal_handler);
signal(SIGSEGV, signal_handler);

while(g_run)
fun2(3);

return 1;
}
过去的我 2008-06-02
  • 打赏
  • 举报
回复
c调用本来就应该是调用者自己恢复堆栈的,也就是 add $0x10,%esp 这句,
为什么会出错估计就是esp被改写了,数组越界造成
SpriteLW 2008-06-02
  • 打赏
  • 举报
回复
我知道是Z3funi 问题,但add $0x10,%esp 出错会是什么原因导致的,栈溢出还是栈被破坏?
puzzlesky 2008-06-02
  • 打赏
  • 举报
回复
看不出来
baihacker 2008-06-02
  • 打赏
  • 举报
回复
应该是里
Z3funi
这个函数里面
写越界,或者改变了不应该改变的东西
星羽 2008-06-02
  • 打赏
  • 举报
回复

应该是
call 8048344 <_Z3funi>

函数里的问题

你可以检查下这个函数,或则把它去了看看
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的详细知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需求,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧