热烈庆祝本人受关注人数即将突破4000大关!散分!!+征集各种语言实现“运行时修改代码”例子。

赵4老师 2013-10-29 10:50:43
征集其它语言(包括各种脚本)实现“运行时修改代码”的例子。
用汇编语言比较容易实现“运行时修改代码”。
以下C语言“运行时修改代码”例子:
#pragma comment(linker,"/SECTION:.text,RW")
#include <stdio.h>
#ifdef _DEBUG
#define OFFSET 0x0C
#else
#define OFFSET 0x01
#endif
int *p;
int p2() {
int a;

a=2;
return a;
}
int main() {
p=(int *)((char *)p2+OFFSET);
printf("p2==0x%08x,p==0x%08x,*p==%d\n",(char *)p2,p,*p);
*p=3;
printf("p2()==%d\n",p2());
return 0;
}
//p2==0x00401000,p==0x0040100c,*p==2
//p2()==3
//

...全文
2806 106 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
106 条回复
切换为时间正序
请发表友善的回复…
发表回复
纹枰老妖 2014-12-29
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.text,RW") 
#include <stdio.h>
int *p;

int p2() 
{     
	int a=87; 
	a=a+15;     
	return a; 
} 

int main() 
{      
	int o;
	p=(int *)((char *)p2+59);
    *p=0xE883FC45;
	o=8;
	printf("p2()==%d\n",p2());
	scanf("%d",p);
	return 0;
 }
最后的输出结果是【p2()=72】,嘿嘿,坐等领分。。。
jacksonfan 2014-11-18
  • 打赏
  • 举报
回复
已经关注赵老师
楼上看云 2014-08-15
  • 打赏
  • 举报
回复
不错……顶一个
不倒的土豆 2014-07-18
  • 打赏
  • 举报
回复
接分走人
yangke858 2014-04-23
  • 打赏
  • 举报
回复
「已注销」 2014-03-31
  • 打赏
  • 举报
回复
赵老师是我的偶像,生命不息,学习不止!
ojc520520 2014-02-14
  • 打赏
  • 举报
回复
这位 赵老师经常见到。
keal2012 2014-02-10
  • 打赏
  • 举报
回复
送粉 这代码看不太懂...
寒沙胜雪 2014-01-17
  • 打赏
  • 举报
回复
仔细看,赵老的话其实很有道理呢。。
u012997273 2013-12-31
  • 打赏
  • 举报
回复
引用 83 楼 xiyuyan 的回复:
首先祝贺,同时不知道4000关注群有啥好处? 运行时修改代码不是好习惯,刚学指针的新手都会。 运行时能修改程序自身的可执行文件(修改硬盘文件)才叫本事。 习语言示例 〖 #包含 “习语言系统.接口” 无返回值 主函数(无参数) { 整数 学员[50],张三,修改标志=1; 格式输入(“%(整数)”,&张三); 学员[50] = 张三 + 100; // 第一次修改程序; 格式输出(“%(整数)”,张三); } 〗
呵呵,来参观赵老师,呵呵,修改自身,可以的啊,不过麻烦很多,程序在运行,自身文件时无法写入的,不过可以强制写入(ring0下,强制去掉一些相关东东),也可以用先寄托在其他进程内,然后结束进程,在其他进程内寄托的副本,来修改真实文件
shiguojie19892 2013-12-18
  • 打赏
  • 举报
回复
刚刚注意到赵老师的帖子啊 呵呵
hemmingway 2013-11-30
  • 打赏
  • 举报
回复
我鲁班无敌 2013-11-28
  • 打赏
  • 举报
回复
不明觉厉
largeskymengsk 2013-11-12
  • 打赏
  • 举报
回复
老赵,屌炸天呀。
独孤的根号3 2013-11-12
  • 打赏
  • 举报
回复
我晕,我明明看的是另外一个哥们的帖子,怎么突然跑赵老师这边来了
示申○言舌 2013-11-07
  • 打赏
  • 举报
回复
我这里有用thunk封装的windows类,用到了运行时修改代码。使用的MFC一样的技术,thunk. http://blog.csdn.net/sdhexu
432345 2013-11-07
  • 打赏
  • 举报
回复
新人表示看不明白!
赵4老师 2013-11-07
  • 打赏
  • 举报
回复
自顶!
赵4老师 2013-11-05
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
lm_whales 2013-11-05
  • 打赏
  • 举报
回复
修改数据码段实现之 把数据当代码调用 数据段,改成代码段即可 Windows 加载程序就是这么干的。 你的程序,对他就是数据。 加载后,把你的程序当作代码启动。
加载更多回复(83)

70,020

社区成员

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

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