程序为何挂掉?


#include<stdio.h>
#include<stdlib.h>
// 自己构造mov指令更改变量值
int val,address;
char *func() //构造mov addr,val指令 与jmp指令
{
char *code,*pMov,*pAddr,*pJmp;
code=(char *)malloc(16); //申请2个指令的空间
//mov
pMov=code;
pMov[0]=0xc7;
pMov[1]=0x05;
pAddr=code+2;
*((int*)pAddr)=(int)&val;
*((int *)(pAddr+4))=30;
//jmp
//pJmp=code+11; 不能加11
pJmp=code+10;
pJmp[0]=0xff;
pJmp[1]=0x25;
//4字节的地址
//*((int *)(pJmp+2))=(int)&address;
*((int *)(&pJmp[2]))=(int)&address;
//=mov dword ptr [pJmp+2],address
return code; //返回指令的地址
}

//计算机中 机器码中并没有类型之分 char 仅仅代表 byte
//char的作用是给编译器用的。编译器解释的时候 解释一个字节 并转换为字符类型
//为什么不用void?void看起来像全能类型。而用char *? 因为char占一个字节 void占4字节
int main()
{
//char *pCode;
//pCode=func(); //擦 这个返回一个字节 一开始就觉得不正确
void *pCode=func();
_asm{
mov address,offset lable
}
val=10;

printf("%d\n",val);
//执行下面的asm就会挂掉
_asm{
jmp pCode
}
val=20;

lable:
printf("%d\n",val);
return 0;
}

解决方案:

时间: 2024-10-26 19:31:36

程序为何挂掉?的相关文章

(转帖)为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?

在知乎上,有个人问了这样的一个问题--为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事. 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误导,所以就上去回答了一下这个问题. 下面我把问题和我的回答发布在这里,也供更多的人查看. #inclu

通过try、except和else的使用来使Python程序更加“强壮”

在执行的程序中,难免会碰到因为一些原因如输入输出导致致命性错误产生的情况(如因为输入的文件名错误而导致无法运行相关的代码.).此时你不希望程序直接挂掉,而是通过显示一些信息,使其平稳的结束.此时,就可以使用try,except和else这三个关键字来组成一个包容性很好的程序. 分别解释三个关键字: try:执行可能会出错的试探性语句,即这里面的语句是可以导致致命性错误使得程序无法继续执行下去 except:如果try里面的语句无法正确执行,那么就执行except里面的语句,这里面可以是错误信息或

vfork 为何挂掉

在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事. 我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误导,所以就上去回答了一下这个问题. 下面我把问题和我的回答发布在这里,也供更多的人查看. 1 2 3

system函数遇到的问题 - 程序死掉

system函数遇到的问题 解决方案见最下边 http://blog.csdn.net/yangzhenzhen/article/details/51505176 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system(

基于nodejs的http模块通过smartqq实现自动收发qq消息的程序

---恢复内容开始--- 背景:2月1日我们实验室的qq群引入了一个聊天机器人,可实现签到,打劫,玩游戏(如24点,猜字谜等)等的功能,签到,打劫成功,游戏胜利(如24点回答正确)可获得积分,寒假时未曾关注群所以开学时自己毫无积分,而其他同学都已为富一方,尤其是某学长积分竟达十万之巨,(签到一次100左右,24点回答正确100),遂疑惑,问之,学长曰:无他,刷分耳.于是在4月9日,参考了下学长的思路(http://www.zhangzaizai.com/2017/02/08/xiaozi-hel

解决使用 libjpeg 保存图片时因磁盘写入失败导致程序退出的问题

0. libjpeg 介绍 libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码.JPEG编码和其他的JPEG功能的实现.这个库由独立JPEG工作组维护.参考:http://zh.wikipedia.org/wiki/Libjpeg 本文基于 libjpeg9 对使用 libjpeg 保存图片时因磁盘写入失败导致程序退出的问题进行分析,文中的代码和解决问题的方法均可结合 libjpeg9 编译通过. 1.使用 libjpeg 保存图片的方法. 不多说,直接上代码: /**

处理挂掉的守护进程和其相关信息

在写守护进程的时候,会涉及一些启动锁文件,进程id文件等信息.而当程序一旦挂掉(有时候可能是程序不工作,多线程引起的资源死锁等.),要强制关闭进程并且删除相关的文件信息.手动来操作,比较麻烦.写个程序会比较好: import subprocess,re,sys pidReg = re.compile("root\s+(\d+)\s") def kill(process):     p = subprocess.Popen("ps axu | grep py",she

c++ 服务器程序bug dump

调试服务器程序时最怕遇到需要运行10天半个月才遇到一次的bug,这种bug很难还原现场,同时还要时刻注意服务器是否挂掉. 本文给出一个解决方法可以极大的提高调试效率. 使用本文方法可以在断言失败时自动dump,可用于还原bug环境进行调试.另外崩溃时也会自动记录crash dump. 断言函数 bool xassert(bool r){ if(!r) __asm int 3 return r; } 最终异常处理函数,遇到这里的话说明程序只能挂掉了,写crash dump LONG WINAPI

对于linux下system()函数的深度理解(整理)

对于linux下system()函数的深度理解(整理) (2013-02-07 08:58:54) 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()函数不稳定?