小编Emp*_*ian的帖子

无法为崩溃的程序创建核心文件

我使用的是Ubuntu 12.04 LTS.我写了一个简单的程序如下来创建崩溃

// null.c
#include<stdio.h>

int main()
{
   int *p = NULL;
   int k=*p;
   printf("%d",sizeof(0));
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我使用"gcc -g null.c"然后"./a.out"运行,输出正如预期的那样.

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

现在我想使用gdb查看核心转储文件.我做了以下事情

  1. 我检查了当前目录,没有核心转储文件
  2. 我尝试用内容"core.%e.%p"更改/ proc/sys/kernel/core_pattern.但我无法写入文件.它说"Fsync失败".
  3. 我使用了"sudo vi/proc/sys/kernel/core_pattern".仍然无法写入文件.

我想在当前目录中创建核心转储.现在做什么?

linux gdb coredump file

8
推荐指数
1
解决办法
8375
查看次数

如何检查 ElasticSearch 的 Reindex API 的进度

我正在尝试通过Reindex API从远程 ES 2.4 集群执行重新索引操作。哪个工作是将超过 1 亿个索引文档传输到最新版本的 Elasticsearch。

对于测试用例,我正在小数据集上尝试,但我面临以下问题。

问题:

  1. 我看不到脚本的进度,即传输了多少文档以及还剩下多少文档。

  2. 如果失败,我如何恢复脚本而不是从 0 重新启动。

elasticsearch reindex logstash elastic-stack

8
推荐指数
1
解决办法
1万
查看次数

查找 PLT 存根的地址

我正在 Linux X86_64 上工作。

我需要根据条目所代表的动态函数的名称来确定 ELF 文件中特定 PLT 条目的地址。我可以算出文件相对于地址的偏移量,但我需要能够确定地址。

如果我使用反汇编 ELF 文件,objdump -D -z elffile我会发现 objdump 对 PLT 中的每个条目使用符号名称。(objdump从哪里获取这些地址和符号名的关系?)

例子:

0000000000000041a2b0 fileno@plt:
Run Code Online (Sandbox Code Playgroud)

如果我使用objdump -T elffile | grep fileno我会得到这样的东西:

0000000000000   DF *UND*  00000000000000000   GLIBC_2.2.5 fileno
Run Code Online (Sandbox Code Playgroud)

我需要从“C”做的是在 ELF 文件中找到特定动态函数的 PLT 条目并获取地址。

背景是我正在修补现有的 ELF 文件,并且需要将函数调用重定向到不同的动态函数。我已经使用从 objdump 反汇编中收集的地址手动修补了 ELF 文件,并证明这适用于我的特定应用程序,我只需要能够从程序中执行此操作。我希望不必通过 objdump 反汇编程序代码来找出它如何获取 PLT 条目符号和地址。

linux x86-64 elf plt got

7
推荐指数
1
解决办法
2771
查看次数

尝试在汇编程序中打印变量时 GDB 显示错误消息

在从书中学习汇编语言时,有一个清单显示了一些基本操作:

segment .data
a   dq  176
b   dq  4097

segment .text
global _start

_start:
    mov rax, [a]    ; Move a into rax.
    add rax, [b]    ; add b o rax.
    xor rax, rax
    ret
Run Code Online (Sandbox Code Playgroud)

使用"$yasm -f elf64 -g dwarf2 -l listing.lst listing.asm"命令组装并链接后,"$ld -o listing listing.o"我在 gdb 中运行了程序。每当我尝试打印变量的值时,gdb 都会显示以下错误消息:

(gdb) p a
'a' has unknown type; cast it to its declared type
Run Code Online (Sandbox Code Playgroud)

另一个变量“b”也是如此。但是,为 int 转换 'a' 或 'b' 有效:

(gdb) p (int)a
$11 = 176
(gdb) p …
Run Code Online (Sandbox Code Playgroud)

assembly gdb yasm

7
推荐指数
1
解决办法
5117
查看次数

Google perftool无法读取文件"libprofiler.so.0"

我正在尝试使用谷歌性能工具进行CPU时间分析.但是,我遇到了一些问题,我无法读取共享库文件"libprofiler.so.0"

我已经阅读了google性能工具的自述文件,手册中有3个步骤:

  1. 编译我的程序-lprofiler.我没有遇到任何问题.

  2. 运行我的程序的二进制文件以生成配置文件结果文件.
    我在这一步失败了.当我尝试运行我的二进制文件时,会出现一条错误消息:
    "error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory.".
    我用谷歌搜索,在这个页面中,有人说它"libprofiler.so.0""/usr/local/lib",所以我将共享库文件复制到我的二进制文件目录,并尝试运行我的二进制文件.它仍然报告相同的错误消息.

我刚刚使用Linux大约一年,请原谅我,如果我的问题非常愚蠢.并且,提前谢谢你.

我的机器信息:

  • 操作系统:Ubuntu 8.10
  • 编译器:gcc 4.3.2
  • shell:bash
  • 谷歌性能工具版本:1.4(我今天刚下载)

linux shared-libraries dynamic-linking google-perftools

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

在我的glibc构建中来自ld-linux的Segfault

运行Ubuntu 10.04

$ uname -a
Linux minion 2.6.32-36-generic-pae #79-Ubuntu SMP Tue Nov 8 23:25:26 UTC 2011 i686 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

下载源并执行以下操作:

CFLAGS="-O2 -U_FORTIFY_SOURCE -fno-stack-protector" '/home/user/Desktop/eglibc-2.11.1/configure' --prefix='/home/user/Desktop/eglibc_pristinebuild'
make -j4
export LD_LIBRARY_PATH=/lib/tls/i686/cmov:/lib:/usr/lib
Run Code Online (Sandbox Code Playgroud)

这有效:

$ ./elf/ld-linux.so.2 /bin/ls /usr
bin  games  include  lib  lib64  local  sbin  share  src
Run Code Online (Sandbox Code Playgroud)

这失败了:

$ ./elf/ld-linux.so.2 /bin/true
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

但这有效:

/lib/ld-linux.so.2 /bin/true
Run Code Online (Sandbox Code Playgroud)

False,grepcat其他我/bin以同样的方式在segfault中尝试过的其他事情.源是否存在问题?我编译错了吗?

另外值得注意的是,我为raspberry pi(ARM)下载了正确的版本(略微更新),编译了它,并且它没有段错误.

c linux ubuntu linker

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

ELF 文件类型 - ET_EXEC 和 ET_DYN

好吧,据我所知ET_EXEC用于表示该文件是可执行文件,而ET_DYN表示该文件是一个共享库。所以可以肯定的是,我用 C 编写了一个简单的程序,但问题是readelf -h产生了以下内容:

ELF Header:
Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
Class:                             ELF64
Data:                              2's complement, little endian
Version:                           1 (current)
OS/ABI:                            UNIX - System V
ABI Version:                       0
Type:                              DYN (Shared object file)
  .
  .
  .
Run Code Online (Sandbox Code Playgroud)

我认为这与我使用的编译器有关,所以我对/bin 中的一些实用程序做了同样的事情,但不幸的是得到了相同的结果。那么问题来了:为什么 readelf 将可执行文件识别为共享库?

x86 elf

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

首次从 Play 商店安装后,Firebase 动态链接被破坏,并且首次安装后无法打开深层链接

Dynamic Link我在 Firebase 控制台中创建了一个。我在应用程序中有“引用”选项,它创建一个动态链接,并且该链接通过某些媒体共享。根据 Firebase 文档,如果尚未安装应用程序,它将打开 Play 商店并允许用户下载该应用程序。但是,一旦下载了应用程序(根据文档),它应该显示Continue首次打开应用程序的选项,以便预期的动态链接流将起作用。但我还没有从 Play 商店收到这样的“首次安装”选项,它显示了Open破坏动态链接并从头开始打开应用程序的选项。
生成的代码Dynamic Link

String e="https://myappinvite.page.link/?link=https://myappinvite.page.link/?referid=10&apn=com.learnandro&amv=16&st=Please Install the App&si="+some Image Url+"&afl=https://play.google.com/store/apps/details?id=app Package name";

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance()
                        .createDynamicLink()
                        .setLongLink(Uri.parse(e))
                        .buildShortDynamicLink()
                        .addOnCompleteListener(new OnCompleteListener<ShortDynamicLink>() {
                            @Override
                            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                                Uri get=task.getResult().getShortLink();
                                Intent sh=new Intent(Intent.ACTION_SEND);
                                sh.setType("text/plain");
                                sh.putExtra(Intent.EXTRA_TEXT,"Vi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ew the Amazing Event   "+get);
                                startActivity(Intent.createChooser(sh,"View"));
                            }
                        });  
Run Code Online (Sandbox Code Playgroud)

Manifest文件看起来像这样

<activity android:name=".login.LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category …
Run Code Online (Sandbox Code Playgroud)

android deep-linking firebase firebase-dynamic-links

6
推荐指数
0
解决办法
1435
查看次数

使用 CMake 将调试标志从 -g 更改为 -ggdb3

考虑以下简单的 C++ 程序:

// main.cpp
#include <iostream>

int main()
{
    std::cout << "Hello World" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用 CMake 为该项目生成 Makefile,然后使用 GNU Make 和 g++ 进行构建。我的CMakeLists.txt文件看起来像这样(实际上更复杂,这当然是简化的):

cmake_minimum_required(VERSION 3.20)
project(HelloWorld VERSION 1.0 LANGUAGES CXX)

add_executable(HelloWorld main.cpp)
Run Code Online (Sandbox Code Playgroud)

一切正常,但是在构建调试版本时:

cmake -DCMAKE_BUILD_TYPE=Debug ..
Run Code Online (Sandbox Code Playgroud)

我注意到使用的调试器标志是-g。当运行make VERBOSE=1查看使用了哪些标志时,编译时会显示以下内容main.cpp

[ 50%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.o
/usr/bin/c++ -g -MD -MT CMakeFiles/HelloWorld.dir/main.cpp.o -MF CMakeFiles/HelloWorld.dir/main.cpp.o.d -o CMakeFiles/HelloWorld.dir/main.cpp.o -c /home/HelloWorld/main.cpp
Run Code Online (Sandbox Code Playgroud)

请注意-gCMake 自动放置的用于添加调试信息的标志。

我怎样才能将其更改-ggdb3为呢?

c++ gdb cmake

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

从 firebase 动态链接到 expo go 的深层链接

所以我使用 firebase 动态链接,创建了一个链接,它在 Playstore 和 appstore 中打开下载/生产应用程序。在网络上它会打开 URL,因此一切正常。

但我正在世博会管理的工作流程中进行开发。我想用动态链接的参数来做一些事情。在屏幕上显示文本等。

我如何在 expo go 应用程序上测试 firebase 动态链接。或者我需要使用模拟器来做其他事情吗?

我已经尝试过使用 expo-linking 进行一些操作,并且可以使其工作,但我不知道如何在 expo go 中获取 firebase 动态链接

firebase react-native firebase-dynamic-links expo

6
推荐指数
0
解决办法
342
查看次数