我正在尝试编写一个可以解析核心转储文件的C程序.我的问题是,如何在C中获取导致核心转储的地址?我知道可以从这个答案中使用gdb获取地址:
但我想直接在C中检索地址.任何信息都将受到高度赞赏.谢谢!
注意:我知道如何将核心转储解析为精灵.但我不知道如何获得导致段错误的地址.
我面临一个相当棘手的问题.我正在尝试将2个虚拟内存区域指向相同的物理内存.关键是在不同的内存区域上有不同的页面保护参数.
在这个论坛上,用户似乎有一个解决方案,但它似乎有点hacky并且很明显可以在性能方面做得更好:http: //www.linuxforums.org/forum/programming-scripting/19491-map -两个虚存储器ADDRES-相同物理-page.html中
当我面临同样的问题时,我想在这里试一试,知道是否有人有更好的想法.不要害怕提到引擎盖后面的脏细节,这就是这个问题的内容.
提前谢谢.
我有一个共享库(libtest.cpp)和一个简单的程序(test.cpp).我希望他们共享一个线程局部变量gVar.共享库通过LD_PRELOAD链接.
这是我的共享库libtest.cpp的代码:
#include<stdio.h>
__thread int gVar;
void print_gVar(){
printf("%d\n", gVar);
}
Run Code Online (Sandbox Code Playgroud)
下面是test.cpp的代码.
#include<stdio.h>
__thread int gVar;
void __attribute__((weak)) print_gVar();
int main(){
gVar = 10;
print_gVar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下脚本来编译和运行它们.
g++ -g -shared -fPIC -olibtest.so libtest.cpp
g++ -g -fPIC -o test test.cpp
LD_PRELOAD=./libtest.so ./test
Run Code Online (Sandbox Code Playgroud)
预期的结果是10,因为test.cpp中的赋值将影响libtest.cpp中的gVar.但是,我只得到0.似乎libtest.cpp中的gVar和test.cpp中的gVar没有链接.
我做了一些额外的测试:
如果我在任何文件中添加__attribute__((weak))声明gVar,则输出仍为0.
如果我__thread从两个文件中删除,则结果为10(成功).
如果我在libtest.cpp中添加extern和__attribute__((weak))声明gVar,则会出现分段错误.
我想一定是坏了LD_PRELOAD和__thread.但我无法弄清楚.
谁能告诉我如何才能让它发挥作用?非常感谢你!
我正在尝试使用Pin编写函数调用跟踪器.它可以打印每个函数调用以及每个参数的值.
困难在于获得函数的所有参数.使用RTN_InsertCall,您可以将函数参数传递给检测代码:
intel pin RTN_InsertCall多个函数参数
但是,您需要知道当前例程的参数数量.有没有办法做到这一点?
谢谢!
我正在编译courier-authlib-0.66.1,它利用libtool进行编译.我修改了所有Makefile以删除--mode =链接行中的CFLAGS和CXXFLAGS,因为我使用了一些特殊的编译器标志用于clang,这会使链接器混乱.
在编译期间,我收到以下错误:
libtool的:链接:在/ usr/bin中/纳米-B的.libs/authsasl.o的.libs/authsaslcram.o的.libs/authsasllogin.o的.libs/authsaslplain.o的.libs/authsaslfrombase64.o的.libs/authsasltobase64.o | |/bin/sed的/.*//'| 排序| uniq> .libs/libcourierauthsasl.exp
./libtool:eval:line 1085:意外标记附近的语法错误`|'
显然命令中有两个条,我应该删除其中一个.但是,当我打开libtool文件并跳转到第1085行时,我只找到以下代码
评估"$ my_cmd"
你能告诉我如何找到这个错误的根本原因并解决它吗?或者哪些文件可能对我有帮助?谢谢!
我试图在函数传递中创建一个全局变量.代码是
gVar= new GlobalVariable(
/*Type=*/Int32Type,
/*isConstant=*/false,
/*Linkage=*/GlobalValue::CommonLinkage,
/*Initializer=*/0, // has initializer, specified below
/*Name=*/"gVar",
/*ThreadLocalMode*/GlobalVariable::InitialExecTLSModel);
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到以下编译器错误:
错误:没有匹配函数来调用'llvm :: GlobalVariable :: GlobalVariable(const llvm :: Type*&,bool,llvm :: GlobalValue :: LinkageTypes,int,const char [4],llvm :: GlobalVariable :: ThreadLocalMode )"
你能告诉我在llvm中声明一个全局变量的正确方法吗?非常感谢你!
另外,我已经提到了头文件:
http://llvm.org/docs/doxygen/html/GlobalVariable_8h_source.html
这篇文章
我正在尝试使用/ usr / bin / time来收集程序的平均驻留集大小。我用几个程序尝试了此命令,但平均居民集大小始终为零。例如:

我的操作系统是ubuntu 10.04。
您能告诉我原因是什么或如何解决吗?非常感谢你!