如何区分gui和console apps elf文件
How to distinguish between gui and console apps elf file
我想只执行 gui 应用程序,但问题是,我不知道如何检查它。
你有解决这个问题的方法吗?
#include <stdio.h>
#include <stdlib.h>
#include <elf.h>
int main(int argc, char *argv[]) {
if(argc < 2)return 1;
char buf[256];
Elf64_Ehdr elfhdr;
FILE *f = fopen(argv[1],"rb");
if(f == NULL)return 2;
fread(&elfhdr,1,64, f);
fclose(f);
if(elfhdr.e_ident[0] == 127 && elfhdr.e_ident[1] == 'E'
&& elfhdr.e_ident[2] == 'L' && elfhdr.e_ident[3] == 'F'){
if(elfhdr.e_type == 2){
sprintf(buf,"./'%s' > /dev/null 2>&1 &",argv[1]);
system(buf);
}
}
return 0;
}
Linux与"GUI"和控制台应用程序没有区别。那是只有 Windows 才有的东西。 Linux GUI 应用程序是恰好调用导致 windows 出现的函数的应用程序。
您可以做的是检查应用程序是否链接到 GUI 库中。问题是,要确定它们是什么并不容易。 libX 是一个,但它可能没有直接链接(可能通过另一个库)。
ldd
是一个您可以 运行 的工具,它会告诉您可执行文件链接到哪些库(包括间接库)。如果 libX11
不在列表中,则 几乎 可以肯定这不是 GUI 程序。如果是,则它可能 是一个 GUI 程序。
这种区别在 Unix 中毫无用处,因为许多程序确实同时具有控制台和 GUI 行为。 ldd
也是无用的。例如在我的电脑上:
% ldd /usr/bin/firefox
not a dynamic executable
因为 shell 脚本是 运行 实际的 firefox 可执行文件。然而,firefox 几乎肯定是 运行 大多数时候作为 GUI 应用程序。 python3
不直接在 X 库中 link,但是用 Python 编写的任何程序都可能创建 windows,而无需执行任何其他应用程序。 ssh
可用于在远程主机上执行程序,使window显示在本地计算机的X服务器上等
如果您需要知道哪个是 GUI 程序,请询问 用户。
我想只执行 gui 应用程序,但问题是,我不知道如何检查它。
你有解决这个问题的方法吗?
#include <stdio.h>
#include <stdlib.h>
#include <elf.h>
int main(int argc, char *argv[]) {
if(argc < 2)return 1;
char buf[256];
Elf64_Ehdr elfhdr;
FILE *f = fopen(argv[1],"rb");
if(f == NULL)return 2;
fread(&elfhdr,1,64, f);
fclose(f);
if(elfhdr.e_ident[0] == 127 && elfhdr.e_ident[1] == 'E'
&& elfhdr.e_ident[2] == 'L' && elfhdr.e_ident[3] == 'F'){
if(elfhdr.e_type == 2){
sprintf(buf,"./'%s' > /dev/null 2>&1 &",argv[1]);
system(buf);
}
}
return 0;
}
Linux与"GUI"和控制台应用程序没有区别。那是只有 Windows 才有的东西。 Linux GUI 应用程序是恰好调用导致 windows 出现的函数的应用程序。
您可以做的是检查应用程序是否链接到 GUI 库中。问题是,要确定它们是什么并不容易。 libX 是一个,但它可能没有直接链接(可能通过另一个库)。
ldd
是一个您可以 运行 的工具,它会告诉您可执行文件链接到哪些库(包括间接库)。如果 libX11
不在列表中,则 几乎 可以肯定这不是 GUI 程序。如果是,则它可能 是一个 GUI 程序。
这种区别在 Unix 中毫无用处,因为许多程序确实同时具有控制台和 GUI 行为。 ldd
也是无用的。例如在我的电脑上:
% ldd /usr/bin/firefox
not a dynamic executable
因为 shell 脚本是 运行 实际的 firefox 可执行文件。然而,firefox 几乎肯定是 运行 大多数时候作为 GUI 应用程序。 python3
不直接在 X 库中 link,但是用 Python 编写的任何程序都可能创建 windows,而无需执行任何其他应用程序。 ssh
可用于在远程主机上执行程序,使window显示在本地计算机的X服务器上等
如果您需要知道哪个是 GUI 程序,请询问 用户。