我正在尋找一種可以在Linux上找到powerpc cpu type的程序化方法。執行相關答案暗示mfpvr指令,我發現,這是在ELF AUX header可用的,果然,我可以得到我與運行在機器的POWER5串一些谷歌搜索如下:在共享庫代碼中查找ELF輔助頭(或envp)的程序化方法?
#include <stdio.h>
#include <elf.h>
int main(int argc, char **argv, char **envp)
{
/* walk past all env pointers */
while (*envp++ != NULL)
;
/* and find ELF auxiliary vectors (if this was an ELF binary) */
#if 0
Elf32_auxv_t * auxv = (Elf32_auxv_t *) envp ;
#else
Elf64_auxv_t * auxv = (Elf64_auxv_t *) envp ;
#endif
char * platform = NULL ;
for (; auxv->a_type != AT_NULL ; auxv++)
{
if (auxv->a_type == AT_PLATFORM)
{
platform = (char *)auxv->a_un.a_val ;
break;
}
}
if (platform)
{
printf("%s\n", platform) ;
}
return 0 ;
}
在我想使用這個信息的共享庫上下文我無法訪問envp。是否有一種替代的編程方法來查找ELF AUX標頭的開頭?
即使在2.6.16(可能更早)也可用。 – 2012-08-14 19:22:24
2.4.22(Fedora Core 1)沒有/ proc/self/auxv – 2012-08-15 07:34:17
對於那些仍然試圖鏈接到過時平臺的人(是的,我!):使用'getenv()'(或全局符號'environ' )如果有人已經調用了'setenv()'並導致該條目被重定位,則存在訪問未分配內存的風險。 – sh1 2016-03-22 03:55:47