草庐IT

c - 从 ELF 二进制文件中仅提取我的函数名称

我正在编写一个脚本来提取二进制文件中的所有函数(由用户编写)。下面的shell脚本提取了我的函数名以及一些以__开头的库函数readelf-s./a.out|gawk'{if($4=="FUNC"&&$3!="0"&&$7=="13"&&$8!="main"){print"b"$NF;//***Updated}}'&>function_names;function_names文件的输出:b__libc_csu_finibPrintDividerbPrintFooterb__libc_csu_initbPrintHeader我只想提取我的函数。那么如何检查函数名称是否以__开头,或者其他

c - 从 ELF 二进制文件中仅提取我的函数名称

我正在编写一个脚本来提取二进制文件中的所有函数(由用户编写)。下面的shell脚本提取了我的函数名以及一些以__开头的库函数readelf-s./a.out|gawk'{if($4=="FUNC"&&$3!="0"&&$7=="13"&&$8!="main"){print"b"$NF;//***Updated}}'&>function_names;function_names文件的输出:b__libc_csu_finibPrintDividerbPrintFooterb__libc_csu_initbPrintHeader我只想提取我的函数。那么如何检查函数名称是否以__开头,或者其他

android - dlsym : undefined symbol, 安卓 N

我想在我的应用程序中从Android运行时共享库​​中读取值。从Android5开始,当引入了新的运行时并且libart.so首次出现时,我用这段代码成功地做到了:std::unique_ptrhandle{dlopen("libart.so",RTLD_NOW|RTLD_GLOBAL),&dlclose};constexprcharTHREAD_KEY_NAME[]="_ZN3art6Thread17pthread_key_self_E";key_=static_cast(dlsym(handle.get(),THREAD_KEY_NAME));LOG("Currentthread:

android - dlsym : undefined symbol, 安卓 N

我想在我的应用程序中从Android运行时共享库​​中读取值。从Android5开始,当引入了新的运行时并且libart.so首次出现时,我用这段代码成功地做到了:std::unique_ptrhandle{dlopen("libart.so",RTLD_NOW|RTLD_GLOBAL),&dlclose};constexprcharTHREAD_KEY_NAME[]="_ZN3art6Thread17pthread_key_self_E";key_=static_cast(dlsym(handle.get(),THREAD_KEY_NAME));LOG("Currentthread:

linux - 在运行时加载 Linux 库

我认为Linux的一个主要设计缺陷是在以二进制而非源代码形式分发程序时的共享对象hell。这是我的具体问题:我想以ELF二进制形式发布一个Linux程序,该程序应在尽可能多的发行版上运行,以便我的强制依赖性尽可能低:在任何情况下唯一需要的库是libpthread,libX11、librt和libm(当然还有glibc)。当我使用gcc构建我的程序时,我正在动态链接这些库。但是,我的程序也可以选择支持ALSA(声音接口(interface))、Xcursor、Xfixes和Xxf86vm扩展以及GTK。但是只有当它们在用户的系统上可用时才应该使用这些,否则我的程序应该仍然运行但功能有限。

linux - 在运行时加载 Linux 库

我认为Linux的一个主要设计缺陷是在以二进制而非源代码形式分发程序时的共享对象hell。这是我的具体问题:我想以ELF二进制形式发布一个Linux程序,该程序应在尽可能多的发行版上运行,以便我的强制依赖性尽可能低:在任何情况下唯一需要的库是libpthread,libX11、librt和libm(当然还有glibc)。当我使用gcc构建我的程序时,我正在动态链接这些库。但是,我的程序也可以选择支持ALSA(声音接口(interface))、Xcursor、Xfixes和Xxf86vm扩展以及GTK。但是只有当它们在用户的系统上可用时才应该使用这些,否则我的程序应该仍然运行但功能有限。

c - 如何从进程内存镜像创建 ELF 可执行文件

首先,英语不是我的母语。如有错误请多多包涵。如上所述,我想从进程内存镜像创建一个ELF可执行文件。到目前为止,我成功地提取了一个ELFheader、程序header和一个位于动态段中的Elf64_Dyn结构列表。我也恢复了GOT。但是,我不知道如何重建节标题。问题是当ELF可执行文件被加载到内存中时,节头没有被加载。如果我们在Dynamic段中使用Elf64_Dyn结构列表,我们可以获得.rela*段的地址、GOT的地址、字符串表的地址等。但是,它不包含.text和.data等部分的地址。要重建节头,我们需要节的偏移量和地址,但似乎没有办法获得这些信息。如何正确地重建章节标题?感谢您的

c - 如何从进程内存镜像创建 ELF 可执行文件

首先,英语不是我的母语。如有错误请多多包涵。如上所述,我想从进程内存镜像创建一个ELF可执行文件。到目前为止,我成功地提取了一个ELFheader、程序header和一个位于动态段中的Elf64_Dyn结构列表。我也恢复了GOT。但是,我不知道如何重建节标题。问题是当ELF可执行文件被加载到内存中时,节头没有被加载。如果我们在Dynamic段中使用Elf64_Dyn结构列表,我们可以获得.rela*段的地址、GOT的地址、字符串表的地址等。但是,它不包含.text和.data等部分的地址。要重建节头,我们需要节的偏移量和地址,但似乎没有办法获得这些信息。如何正确地重建章节标题?感谢您的

c - 查找谁使用了 ELF 文件中的符号

我有一个很大的二进制文件,其中包含一个符号。我可以在nm或objdump中看到符号。我知道使用了该符号,否则链接器不会包含它(更准确地说,我知道使用了同一源文件中的某些符号)。我正在尝试找出它的具体使用方式。如果引用是由一个函数(例如调用函数的函数、使用全局变量的函数),我可以使用objdump-rd反汇编文件并找到引用。但是如果引用是由变量(例如初始化为指向某个变量的全局指针),则反汇编不会显示它。我没能找到任何方法。这是一个演示它的例子。在此示例中,很明显谁使用了x,但我不知道如何检查生成的二进制文件并找到它。//x.cintx=3;//main.cexternintx;stati

c - 查找谁使用了 ELF 文件中的符号

我有一个很大的二进制文件,其中包含一个符号。我可以在nm或objdump中看到符号。我知道使用了该符号,否则链接器不会包含它(更准确地说,我知道使用了同一源文件中的某些符号)。我正在尝试找出它的具体使用方式。如果引用是由一个函数(例如调用函数的函数、使用全局变量的函数),我可以使用objdump-rd反汇编文件并找到引用。但是如果引用是由变量(例如初始化为指向某个变量的全局指针),则反汇编不会显示它。我没能找到任何方法。这是一个演示它的例子。在此示例中,很明显谁使用了x,但我不知道如何检查生成的二进制文件并找到它。//x.cintx=3;//main.cexternintx;stati