是否可以仅通过复制文本段来创建可执行文件?
Is it possible to create an executable file with just copying the text segment?
当你运行一个C程序时,是否可以从它的TEXT段得到它的二进制代码(你用./foo
执行)?如果我只是将所有的TEXT段复制到一个文件中,那么我可以执行它和运行同一个程序吗?我正在与 Ubuntu.
合作
is it possible to get it binary code
如果您 运行 您的程序处于调试器下,那么您可以从进程 space 的任何位置复制字节,作为数据或代码。
then i can execute it and run the same program?
简单回答:不!
可执行文件不仅仅是内存转储。
如果您的程序是 static-linked 和 position-dependent 并且没有全局数据(注意:最后一个不正确 any non-toy libc 实现),那么理论上文本段就足以 运行 了。但是,您需要一个合适的加载程序才能这样做。普通操作系统的可执行文件加载器不会将这种“原始文本段”加载为可执行文件,因为 (1) 没有 header 信息来表明它是什么,甚至没有从哪里开始执行 (即入口点是什么),以及(2)这样做通常没有用。 DOS 有与 .COM
文件类似的东西,而 uClinux 有 FLAT
接近于此但有一些最小 header 的二进制文件,但这些是你能找到的最接近“过去 3-4 年的原始文本段”二进制文件。
有熟悉的问题link
Is it possible to dissembler running process in Linux?
char *comp = "objdump -d /proc/1234/exe";
fflush(NULL); // always useful before system(3)
int nok = system(comp);
if (nok) {
fprintf(stderr, "compilation %s failed with %d\n", comp, nok);
exit(EXIT_FAILURE);
}
所以我想要的是 /proc/<PID>/exe
文件。
当你运行一个C程序时,是否可以从它的TEXT段得到它的二进制代码(你用./foo
执行)?如果我只是将所有的TEXT段复制到一个文件中,那么我可以执行它和运行同一个程序吗?我正在与 Ubuntu.
is it possible to get it binary code
如果您 运行 您的程序处于调试器下,那么您可以从进程 space 的任何位置复制字节,作为数据或代码。
then i can execute it and run the same program?
简单回答:不! 可执行文件不仅仅是内存转储。
如果您的程序是 static-linked 和 position-dependent 并且没有全局数据(注意:最后一个不正确 any non-toy libc 实现),那么理论上文本段就足以 运行 了。但是,您需要一个合适的加载程序才能这样做。普通操作系统的可执行文件加载器不会将这种“原始文本段”加载为可执行文件,因为 (1) 没有 header 信息来表明它是什么,甚至没有从哪里开始执行 (即入口点是什么),以及(2)这样做通常没有用。 DOS 有与 .COM
文件类似的东西,而 uClinux 有 FLAT
接近于此但有一些最小 header 的二进制文件,但这些是你能找到的最接近“过去 3-4 年的原始文本段”二进制文件。
有熟悉的问题link Is it possible to dissembler running process in Linux?
char *comp = "objdump -d /proc/1234/exe";
fflush(NULL); // always useful before system(3)
int nok = system(comp);
if (nok) {
fprintf(stderr, "compilation %s failed with %d\n", comp, nok);
exit(EXIT_FAILURE);
}
所以我想要的是 /proc/<PID>/exe
文件。