当前位置:  技术问答>linux和unix

程序修改自己(内存中的代码)

    来源: 互联网  发布时间:2016-07-29

    本文导语:  APUE的7.6节《C程序的存储空间布局》上说“正文段通常是只读的,以防止程序由于意外而修改其自身的指令”那么如何修改自己的指令呢? 还有,程序被装在到内存后,与原来在硬盘中的程序文件有什么关系,为什么...

APUE的7.6节《C程序的存储空间布局》上说“正文段通常是只读的,以防止程序由于意外而修改其自身的指令”那么如何修改自己的指令呢?
还有,程序被装在到内存后,与原来在硬盘中的程序文件有什么关系,为什么不能将其删除?

|
一定要修改的话,试试这个,不一定行得通:
#include 
#include 

int fun()
{
  return 1234;
}

int main()
{
  int a = fun();
  printf("%dn", a);
  
  mprotect( (void*)((unsigned long)fun & ~(4096-1)), 4096, PROT_READ|PROT_WRITE|PROT_EXEC );    //第一个古怪的参数是用来对齐页面边界的
  
  char* p = (char*)fun;
  
  //以下指令仅在 x86 或 x86-64 平台有效
  *p++ = 0xb8;    //mov eax, 256
  *p++ = 0x00;
  *p++ = 0x01;
  *p++ = 0x00;
  *p++ = 0x00;
  *p++ = 0xc3;    //ret
  
  a = fun();
  printf("%dn", a);
  
  return 0;
}

    
 
 

您可能感兴趣的文章:

  • c/c++服务器程序内存泄露问题分析及解决
  • 请教!Linux系统C开发的程序,为什么我的程序运行时内存持续增长,程序退出后内存也没有降低?
  • C++程序的内存不同的数据段及堆栈布局
  • 程序需要共享内存相当大,但是系统的内存有限
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • 常驻内存程序就是后台程序吗?
  • 程序运行20分钟狂泻1G内存,当系统只剩5、6M内存时程序依然运行稳定(未使用交换分区),点解?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • CGI程序无法访问本机某个程序创建的共享内存〔求教〕
  • 在Linux上用C语言作了一个程序,程序中申请(malloc)了很大的内存,但是没free,当程序运行结束后,内存是否自动释放?
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • arm程序内存占用问题
  • 请教多线程程序的内存占用问题
  • 程序占用很大的内存
  • 请教,在linux下如何判断程序的内存泄露?
  • 定时top看系统参数,发现我的程序的SIZE项和RES项的数值一直在增加,这是不是说明,我的程序有内存泄漏?
  • 在驱动程序里,用数组,或malloc是申请到虚拟内存吧?
  • 请问在SOLARIS上怎么实时查看程序的内存使用状况??
  • 驱动程序中关于内存的读写问题
  • 求助!怎样实现一个程序长期固定的在一块物理内存
  • 程序在不同的平台占用内存不一样
  • shell 程序监控网站网页是否被修改,如果被修改停止服务器的运行?
  • 用JCreator写了一个小程序,有十几个class,当修改某个文件重新编译,javac并没有编译修改的文件,请问要如何做javac才会重新编译所有的
  • 都是“主引导程序”惹的祸————硬盘的主引导程序被修改后应该如何恢复???
  • java的应用程序中如何定义一个全局变量,在程序的任何地方都可以修改使用?
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • UNIX下 wc,grep,和修改文本文件的c程序的源程序那位高人能否提供一份? zero_baby@163.net
  • [pygtk+glade]怎么用程序修改grid值(有图)
  • 为什么我的applet程序修改了不起作用(win2k),浏览器总是显示前一次装入的程序?
  • jsp程序运行一次后,再修改原jsp程序,为什么运行还是的还是原来的程序??
  • 修改那个配置文件,可以使程序自启动
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • windows下如何把汇编代码和C代码编译成一个程序呢?
  • 谁有LINUX设备驱动程序第三版的程序代码,发我一份,非常的感谢!
  • 在哪里可以下载OREILLY的linux设备驱动程序一书的程序源代码?在线送分!
  • JSP和Servlet程序设计使用专辑---的程序代码哪有?
  • 为什么执行完execlp函数后程序就退出了,怎样才能让程序继续执行后面的代码
  • 如何编译一个包含用户级代码和内核级代码的程序
  • 想找一个java 做的文件下载程序(最好用URL类吧),那位有这方面的程序或代码?100分必送
  • 请问 如何用user用户启动一个程序(或者脚本) 在这个程序(或脚本)里将用户转为root 然后用root执行下面的代码
  • 怎样看到java程序经过编译后的代码内容(bytecode的)或者在bytecode在JVM执行时JVM所解析的代码
  • Makefile,如何传递宏定义DEBUG?以便于程序编译或者跳过程序中#ifdef DEBUG中间的代码段?
  • 各位好,如何将VC++写的程序代码移植到Linux上?用GCC编译的话,程序需要做那些改动?
  • 关于软件或者程序的源代码问题??
  • 高分请教:redhat 的各种应用程序源代码放在哪儿?
  • 程序代码搜索引擎 Krugle
  • 常驻内存程序就是后台程序吗? iis7站长之家
  • 如何用shell检查程序的返回代码
  • 想找些小程序练习(2K行左右的代码量),不知各位老手有何建议?
  • 请问在应用程序里用什么代码获得本机的IP,以及用什么代码设置本机的IP?谢谢
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • 程序员的八种级别,你属于哪一级?
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3