小编Zil*_*ate的帖子

使用C获取从核心转储导致分段错误的地址

我正在尝试编写一个可以解析核心转储文件的C程序.我的问题是,如何在C中获取导致核心转储的地址?我知道可以从这个答案中使用gdb获取地址:

我怎样才能让GDB告诉我哪个地址导致了段错?

但我想直接在C中检索地址.任何信息都将受到高度赞赏.谢谢!

注意:我知道如何将核心转储解析为精灵.但我不知道如何获得导致段错误的地址.

c coredump elf

13
推荐指数
2
解决办法
2756
查看次数

如何在Linux上的同一物理内存上映射两个虚拟地址?

我面临一个相当棘手的问题.我正在尝试将2个虚拟内存区域指向相同的物理内存.关键是在不同的内存区域上有不同的页面保护参数.

在这个论坛上,用户似乎有一个解决方案,但它似乎有点hacky并且很明显可以在性能方面做得更好:http: //www.linuxforums.org/forum/programming-scripting/19491-map -两个虚存储器ADDRES-相同物理-page.html中

当我面临同样的问题时,我想在这里试一试,知道是否有人有更好的想法.不要害怕提到引擎盖后面的脏细节,这就是这个问题的内容.

提前谢谢.

c linux memory low-level

6
推荐指数
1
解决办法
3215
查看次数

LD_PRELOAD和线程局部变量

我有一个共享库(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.但我无法弄清楚.

谁能告诉我如何才能让它发挥作用?非常感谢你!

c++ linux multithreading pthreads

6
推荐指数
1
解决办法
390
查看次数

英特尔引脚获取功能参数编号

我正在尝试使用Pin编写函数调用跟踪器.它可以打印每个函数调用以及每个参数的值.

困难在于获得函数的所有参数.使用RTN_InsertCall,您可以将函数参数传递给检测代码:

intel pin RTN_InsertCall多个函数参数

但是,您需要知道当前例程的参数数量.有没有办法做到这一点?

谢谢!

c++ intel intel-pin

5
推荐指数
1
解决办法
1335
查看次数

链接期间的libtool错误

我正在编译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"

你能告诉我如何找到这个错误的根本原因并解决它吗?或者哪些文件可能对我有帮助?谢谢!

makefile libtool

5
推荐指数
1
解决办法
1740
查看次数

在llvm中创建全局变量时出错

我试图在函数传递中创建一个全局变量.代码是

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

这篇文章

如何在LLVM中声明全局变量?

c++ llvm

3
推荐指数
1
解决办法
2475
查看次数

/ usr / bin / time的平均居民集大小始终为0

我正在尝试使用/ usr / bin / time来收集程序的平均驻留集大小。我用几个程序尝试了此命令,但平均居民集大小始终为零。例如:

/ usr / bin /时间结果

我的操作系统是ubuntu 10.04。

您能告诉我原因是什么或如何解决吗?非常感谢你!

linux

2
推荐指数
1
解决办法
767
查看次数

标签 统计

c++ ×3

linux ×3

c ×2

coredump ×1

elf ×1

intel ×1

intel-pin ×1

libtool ×1

llvm ×1

low-level ×1

makefile ×1

memory ×1

multithreading ×1

pthreads ×1