程序打印自身代码的两种方法
来源:互联网 发布:知乎 加拿大ee 编辑:程序博客网 时间:2024/06/05 06:18
程序打印自身代码的两种方法
方法一:利用fopen,打开可执行程序对应的source code file
/*****************************************code writer : EOFcode file : print_my_self.ccode date : 2014.08.01e-mail: jasonleaster@gmail.comcode purpose : Aha, print out myself!******************************************/#include <stdio.h>#include <fcntl.h>#define BUFFSIZE 1024char buffer[BUFFSIZE];int main(){ FILE* fp = NULL; int ret = 0; if((fp = fopen("./print_my_self.c","r")) == NULL) { printf("Damn it,fopen failed\n"); return 0; } while((ret = fread(buffer,sizeof(char),BUFFSIZE-1,fp)) > 0) { buffer[ret-1] = '\0'; printf("%s",buffer); } fclose(fp); return 0;}
打印什么。。。不用说
上面这种策略就是骗小孩儿的
第二种方法还有点看头,不过也挺。。。没劲的。。。如果看透了的话
方法二:
利用objcopy,然后将source code file 生成一个可以和elf格式文件合并的文件,代码中引用该文件的一个指针,最后用gcc 将两个文件共同编译进可执行程序
/*******************************************code writer : EOFcode date : 2014.08.01code file : test.ccode purpose: just a demo for a useful tool -- objcopyand a point which was produced by the tool and point to the start of this file.*******************************************/#include <stdio.h>extern char* _binary_test_c_start;int main(){ printf("%s",(char*)&_binary_test_c_start); return 0;}
jasonleaster@ubuntu:~$ objcopy -I binary -O elf64-x86-64 -B i386 test.c test.bin
jasonleaster@ubuntu:~$ gcc ./test.bin ./test.c -o ./a.out
jasonleaster@ubuntu:~$ ./a.out
/*******************************************
code writer : EOF
code date : 2014.08.01
code file : test.c
code purpose:
just a demo for a useful tool -- objcopy
and a point which was produced by the tool and
point to the start of this file.
*******************************************/
#include <stdio.h>
extern char* _binary_test_c_start;
int main()
{
printf("%s",(char*)&_binary_test_c_start);
return 0;
}
思(che)考(dan):
其实这个demo有个“bug”,要求是代码打印自身,其实只要在main里面随便加个printf,就会打印额外的信息,打印的就不止是source code file的字符了
第二种方法个人看来就是提升逼格用的,感觉和第一种傻瓜用法没什么本质区别,都离不开原本的source code file--test.c
0 0
- 程序打印自身代码的两种方法
- 打印自身的程序
- 打印自身的程序
- 打印自身的程序
- 打印自身代码的C语言小程序
- 打印自身源码的程序
- 打印自身的程序杂谈
- 打印出自身的程序
- 打印出自身的程序
- 打印自身源代码的程序
- 打印自身源代码的程序,一个通用方法
- c打印自身的代码。
- 技巧用法 --- 打印自身的 C 程序
- [转贴]打印自身的C程序
- 打印源码自身的C++程序
- 打印自身程序
- C++打印程序自身
- 能输出自身代码的程序
- 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
- ubuntu下android源码的下载
- ActionScript3游戏中的图像编程(连载十)
- leetcode做题总结,题目Spiral Matrix I/II 2012/03/24
- 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式
- 程序打印自身代码的两种方法
- Java回调函数的理解
- linux中的mmap与unmap
- SVN分支/合并原理及最佳实践
- 软件设计的七大原则
- ActionScript3游戏中的图像编程(连载十一)
- malloc,colloc,realloc内存分配,动态库,静态库的生成与调用
- pat1074_备份
- ZOJ Problem Set - 1512 (Water Treatment Plants)