国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm)

這篇具有很好參考價(jià)值的文章主要介紹了linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

介紹

測(cè)試代碼源碼、源碼如下:

#include <openssl/evp.h>
#include <openssl/sm2.h>
#include <openssl/rand.h>
#include <iostream>
#include <string>

EVP_PKEY* generate_sm2_key_pair() {
    EVP_PKEY_CTX *ctx;
    EVP_PKEY *pkey = nullptr;

    // 創(chuàng)建EVP_PKEY_CTX
    ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, nullptr);
    if (!ctx) {
        std::cerr << "Error creating EVP_PKEY_CTX for SM2 key generation" << std::endl;
        return nullptr;
    }

    // 初始化SM2密鑰對(duì)生成
    if (EVP_PKEY_keygen_init(ctx) <= 0 ||
        EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, NID_sm2) <= 0 ||
        EVP_PKEY_keygen(ctx, &pkey) <= 0) {
        std::cerr << "Error generating SM2 key pair" << std::endl;
        EVP_PKEY_CTX_free(ctx);
        return nullptr;
    }

    // 釋放資源
    EVP_PKEY_CTX_free(ctx);
    return pkey;
}

std::string sm2_encrypt(const std::string &plaintext, EVP_PKEY *pubkey) {
      EVP_PKEY_CTX *ctx;
    unsigned char *ciphertext = nullptr;
    size_t ciphertext_len;

    // 創(chuàng)建EVP_PKEY_CTX
    ctx = EVP_PKEY_CTX_new(pubkey, nullptr);
    if (!ctx) {
        std::cerr << "Error creating EVP_PKEY_CTX for encryption" << std::endl;
        return "";
    }

    // 初始化加密操作
    if (EVP_PKEY_encrypt_init(ctx) <= 0) {
        std::cerr << "Error initializing encryption operation" << std::endl;
        EVP_PKEY_CTX_free(ctx);
        return "";
    }

    // 設(shè)置加密參數(shù)(這里可以設(shè)置一些參數(shù),例如填充方式)
    // EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING);

    // 計(jì)算加密后的長(zhǎng)度
    if (EVP_PKEY_encrypt(ctx, nullptr, &ciphertext_len, reinterpret_cast<const unsigned char*>(plaintext.c_str()), plaintext.length()) <= 0) {
        std::cerr << "Error computing ciphertext length" << std::endl;
        EVP_PKEY_CTX_free(ctx);
        return "";
    }

    // 分配內(nèi)存并執(zhí)行加密操作
    ciphertext = new unsigned char[ciphertext_len];
    if (EVP_PKEY_encrypt(ctx, ciphertext, &ciphertext_len, reinterpret_cast<const unsigned char*>(plaintext.c_str()), plaintext.length()) <= 0) {
        std::cerr << "Error encrypting data" << std::endl;
        delete[] ciphertext;
        EVP_PKEY_CTX_free(ctx);
        return "";
    }

    // 釋放資源
    EVP_PKEY_CTX_free(ctx);

    // 返回加密后的數(shù)據(jù)(Base64編碼)
    std::string encoded_ciphertext(reinterpret_cast<char*>(ciphertext), ciphertext_len);
    delete[] ciphertext;
    return encoded_ciphertext;
}

std::string sm2_decrypt(const std::string &ciphertext, EVP_PKEY *privkey) {
     EVP_PKEY_CTX *ctx;
    unsigned char *plaintext = nullptr;
    size_t plaintext_len;

    // 創(chuàng)建EVP_PKEY_CTX
    ctx = EVP_PKEY_CTX_new(privkey, nullptr);
    if (!ctx) {
        std::cerr << "Error creating EVP_PKEY_CTX for decryption" << std::endl;
        return "";
    }

    // 初始化解密操作
    if (EVP_PKEY_decrypt_init(ctx) <= 0) {
        std::cerr << "Error initializing decryption operation" << std::endl;
        EVP_PKEY_CTX_free(ctx);
        return "";
    }

    // 計(jì)算解密后的長(zhǎng)度
    if (EVP_PKEY_decrypt(ctx, nullptr, &plaintext_len, reinterpret_cast<const unsigned char*>(ciphertext.c_str()), ciphertext.length()) <= 0) {
        std::cerr << "Error computing plaintext length" << std::endl;
        EVP_PKEY_CTX_free(ctx);
        return "";
    }

    // 分配內(nèi)存并執(zhí)行解密操作
    plaintext = new unsigned char[plaintext_len];
    if (EVP_PKEY_decrypt(ctx, plaintext, &plaintext_len, reinterpret_cast<const unsigned char*>(ciphertext.c_str()), ciphertext.length()) <= 0) {
        std::cerr << "Error decrypting data" << std::endl;
        delete[] plaintext;
        EVP_PKEY_CTX_free(ctx);
        return "";
    }

    // 釋放資源
    EVP_PKEY_CTX_free(ctx);

    // 返回解密后的數(shù)據(jù)
    std::string decrypted_plaintext(reinterpret_cast<char*>(plaintext), plaintext_len);
    delete[] plaintext;
    return decrypted_plaintext;
}

int main() {
    EVP_PKEY *pubkey = generate_sm2_key_pair();
    EVP_PKEY *privkey = pubkey;  // 在實(shí)際應(yīng)用中,公鑰和私鑰應(yīng)該分開

    if (!pubkey) {
        std::cerr << "Error generating SM2 key pair" << std::endl;
        return 1;
    }

    std::string plaintext = "Hello, SM2!";
    std::string ciphertext = sm2_encrypt(plaintext, pubkey);
    std::string decrypted_text = sm2_decrypt(ciphertext, privkey);

    std::cout << "Original Text: " << plaintext << std::endl;
    std::cout << "Encrypted Text: " << ciphertext << std::endl;
    std::cout << "Decrypted Text: " << decrypted_text << std::endl;

    EVP_PKEY_free(pubkey);

    return 0;
}

編譯命令

g++ -o sm2_example main.cc -lssl -lcrypto

一、ldd 動(dòng)態(tài)庫(kù)關(guān)系查詢

ldd 是 Linux 下的一個(gè)命令,用于查看可執(zhí)行文件或共享庫(kù)文件的動(dòng)態(tài)鏈接庫(kù)依賴關(guān)系。通過 ldd 命令,你可以確定一個(gè)可執(zhí)行文件或共享庫(kù)文件所依賴的動(dòng)態(tài)鏈接庫(kù)(也就是它們?cè)谶\(yùn)行時(shí)需要加載的庫(kù)文件)。

1.1 命令語(yǔ)法

ldd [OPTIONS] FILE
  • OPTIONS(可選)ldd 命令支持的一些選項(xiàng),用于控制輸出格式等。常用選項(xiàng)包括:

    • -v--verbose:顯示詳細(xì)的版本信息。
    • -u--unused:顯示未使用的直接依賴項(xiàng)。
    • -d--data-relocs:顯示使用 RELRO(Read-only relocations)技術(shù)的 ELF 文件的數(shù)據(jù)重定位信息。
  • FILE(必需):指定要查看動(dòng)態(tài)鏈接庫(kù)依賴關(guān)系的可執(zhí)行文件或共享庫(kù)文件的路徑。

1.2 示例

  • 示例 1:查看可執(zhí)行文件的動(dòng)態(tài)鏈接庫(kù)依賴關(guān)系
ldd sm2_example

這將顯示該可執(zhí)行文件依賴的動(dòng)態(tài)鏈接庫(kù)。
linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm),linux,linux,運(yùn)維,服務(wù)器

  • 示例 2:查看共享庫(kù)文件的動(dòng)態(tài)鏈接庫(kù)依賴關(guān)系
sudo ldd  /lib/x86_64-linux-gnu/libcrypto.so.1.1

這將顯示該共享庫(kù)文件依賴的動(dòng)態(tài)鏈接庫(kù)。
linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm),linux,linux,運(yùn)維,服務(wù)器

  • 示例 3:顯示未使用的依賴項(xiàng)
ldd -u sm2_example

這將顯示可執(zhí)行文件中未使用的直接依賴項(xiàng)。

linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm),linux,linux,運(yùn)維,服務(wù)器

1.3 ldd安裝

ldd 不是一個(gè)單獨(dú)的軟件包,而是 Linux 系統(tǒng)中的一個(gè)標(biāo)準(zhǔn)工具,通常隨著系統(tǒng)的安裝而自動(dòng)提供。它屬于 GNU Binutils 工具集的一部分,用于顯示可執(zhí)行文件或共享庫(kù)文件的動(dòng)態(tài)鏈接庫(kù)依賴關(guān)系。

如果您的系統(tǒng)上沒有 ldd 命令,這可能是一個(gè)不太常見的情況,但您可以嘗試重新安裝 GNU Binutils 包來獲取 ldd 命令。具體的安裝步驟可能因您使用的 Linux 發(fā)行版而異,以下是幾個(gè)常見的 Linux 發(fā)行版上安裝 GNU Binutils 的方法:

  • 在 Ubuntu 或 Debian 上安裝 GNU Binutils
sudo apt-get update
sudo apt-get install binutils
  • 在 CentOS 或 RHEL 上安裝 GNU Binutils
sudo yum install binutils
  • 在 Fedora 上安裝 GNU Binutils
sudo dnf install binutils
  • 在 openSUSE 上安裝 GNU Binutils
sudo zypper install binutils

請(qǐng)注意,您需要具有管理員權(quán)限(通常是 sudo)才能安裝軟件包。在安裝完成后,ldd 命令應(yīng)該就會(huì)可用了。

二、readelf

readelf 是一個(gè)用于分析 ELF(Executable and Linkable Format)格式二進(jìn)制文件(可執(zhí)行文件和共享庫(kù)文件)的命令行工具。它通常在Linux系統(tǒng)上預(yù)裝,并且是 GNU Binutils 工具集的一部分。readelf 可以提供關(guān)于二進(jìn)制文件的各種信息,包括節(jié)表、符號(hào)表、程序頭、段表等。以下是 readelf 命令的詳細(xì)解釋:

2.1 命令語(yǔ)法

readelf [OPTIONS] FILE
  • OPTIONS(可選)readelf 命令支持的一些選項(xiàng),用于控制輸出格式、顯示特定部分的信息等。常用選項(xiàng)包括:

    • -a--all:顯示所有信息。
    • -h--file-header:顯示文件頭信息。
    • -S--sections:顯示節(jié)表信息。
    • -s--symbols:顯示符號(hào)表信息。
    • -d--dynamic:顯示動(dòng)態(tài)段信息。
    • -r--relocs:顯示重定位信息。
  • FILE(必需):指定要分析的 ELF 格式的可執(zhí)行文件或共享庫(kù)文件的路徑。

2.2 readelf使用示例

示例 1:顯示文件頭信息

readelf -h sm2_example

linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm),linux,linux,運(yùn)維,服務(wù)器

這將顯示指定 ELF 文件的文件頭信息,包括 ELF 類型(32位或64位)、入口地址、段表、節(jié)表等。

示例 2:顯示節(jié)表信息

readelf -S sm2_example

這將顯示指定 ELF 文件的節(jié)表信息,包括每個(gè)節(jié)的名稱、類型、偏移、大小等。

There are 30 section headers, starting at offset 0x4428:

節(jié)頭:
  [號(hào)] 名稱              類型             地址              偏移量
       大小              全體大小          旗標(biāo)   鏈接   信息   對(duì)齊
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         00000000004002a8  000002a8
       000000000000001c  0000000000000000   A       0     0     1
  [ 2] .note.ABI-tag     NOTE             00000000004002c4  000002c4
       0000000000000020  0000000000000000   A       0     0     4
  [ 3] .note.gnu.build-i NOTE             00000000004002e4  000002e4
       0000000000000024  0000000000000000   A       0     0     4
  [ 4] .gnu.hash         GNU_HASH         0000000000400308  00000308
       0000000000000038  0000000000000000   A       5     0     8
  [ 5] .dynsym           DYNSYM           0000000000400340  00000340
       0000000000000348  0000000000000018   A       6     1     8
  [ 6] .dynstr           STRTAB           0000000000400688  00000688
       0000000000000481  0000000000000000   A       0     0     1
  [ 7] .gnu.version      VERSYM           0000000000400b0a  00000b0a
       0000000000000046  0000000000000002   A       5     0     2
  [ 8] .gnu.version_r    VERNEED          0000000000400b50  00000b50
       00000000000000a0  0000000000000000   A       6     4     8
  [ 9] .rela.dyn         RELA             0000000000400bf0  00000bf0
       0000000000000060  0000000000000018   A       5     0     8
  [10] .rela.plt         RELA             0000000000400c50  00000c50
       00000000000002d0  0000000000000018  AI       5    23     8
  [11] .init             PROGBITS         0000000000401000  00001000
       0000000000000017  0000000000000000  AX       0     0     4
  [12] .plt              PROGBITS         0000000000401020  00001020
       00000000000001f0  0000000000000010  AX       0     0     16
  [13] .text             PROGBITS         0000000000401210  00001210
       0000000000000af1  0000000000000000  AX       0     0     16
  [14] .fini             PROGBITS         0000000000401d04  00001d04
       0000000000000009  0000000000000000  AX       0     0     4
  [15] .rodata           PROGBITS         0000000000402000  00002000
       00000000000001c5  0000000000000000   A       0     0     8
  [16] .eh_frame_hdr     PROGBITS         00000000004021c8  000021c8
       0000000000000064  0000000000000000   A       0     0     4
  [17] .eh_frame         PROGBITS         0000000000402230  00002230
       00000000000001d8  0000000000000000   A       0     0     8
  [18] .gcc_except_table PROGBITS         0000000000402408  00002408
       00000000000000a3  0000000000000000   A       0     0     1
  [19] .init_array       INIT_ARRAY       0000000000403db8  00002db8
       0000000000000010  0000000000000008  WA       0     0     8
  [20] .fini_array       FINI_ARRAY       0000000000403dc8  00002dc8
       0000000000000008  0000000000000008  WA       0     0     8
  [21] .dynamic          DYNAMIC          0000000000403dd0  00002dd0
       0000000000000220  0000000000000010  WA       6     0     8
  [22] .got              PROGBITS         0000000000403ff0  00002ff0
       0000000000000010  0000000000000008  WA       0     0     8
  [23] .got.plt          PROGBITS         0000000000404000  00003000
       0000000000000108  0000000000000008  WA       0     0     8
  [24] .data             PROGBITS         0000000000404108  00003108
       0000000000000010  0000000000000000  WA       0     0     8
  [25] .bss              NOBITS           0000000000404120  00003118
       0000000000000238  0000000000000000  WA       0     0     32
  [26] .comment          PROGBITS         0000000000000000  00003118
       0000000000000023  0000000000000001  MS       0     0     1
  [27] .symtab           SYMTAB           0000000000000000  00003140
       0000000000000960  0000000000000018          28    48     8
  [28] .strtab           STRTAB           0000000000000000  00003aa0
       0000000000000871  0000000000000000           0     0     1
  [29] .shstrtab         STRTAB           0000000000000000  00004311
       0000000000000115  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

示例 3:顯示符號(hào)表信息

readelf -s sm2_example

輸出內(nèi)容


Symbol table '.dynsym' contains 35 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _Znam@GLIBCXX_3.4 (2)
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNKSt7__cxx1112basic_str@GLIBCXX_3.4.21 (3)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_new@OPENSSL_1_1_0 (4)
     4: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_keygen_init@OPENSSL_1_1_0 (4)
     5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri@GLIBCXX_3.4.21 (3)
     6: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri@GLIBCXX_3.4.21 (3)
     7: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_encrypt_init@OPENSSL_1_1_0 (4)
     8: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_decrypt@OPENSSL_1_1_0 (4)
     9: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_atexit@GLIBC_2.2.5 (5)
    10: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZStlsIcSt11char_traitsIc@GLIBCXX_3.4.21 (3)
    11: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZStlsISt11char_traitsIcE@GLIBCXX_3.4 (2)
    12: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSolsEPFRSoS_E@GLIBCXX_3.4 (2)
    13: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSaIcED1Ev@GLIBCXX_3.4 (2)
    14: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_free@OPENSSL_1_1_0 (4)
    15: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri@GLIBCXX_3.4.21 (3)
    16: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_new_id@OPENSSL_1_1_0 (4)
    17: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_ctrl@OPENSSL_1_1_0 (4)
    18: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZdaPv@GLIBCXX_3.4 (2)
    19: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri@GLIBCXX_3.4.21 (3)
    20: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_decrypt_init@OPENSSL_1_1_0 (4)
    21: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNKSt7__cxx1112basic_str@GLIBCXX_3.4.21 (3)
    22: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt8ios_base4InitC1Ev@GLIBCXX_3.4 (2)
    23: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _Unwind_Resume@GCC_3.0 (7)
    24: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSaIcEC1Ev@GLIBCXX_3.4 (2)
    25: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_free@OPENSSL_1_1_0 (4)
    26: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_keygen@OPENSSL_1_1_0 (4)
    27: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@GLIBC_2.2.5 (5)
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_encrypt@OPENSSL_1_1_0 (4)
    29: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
    30: 0000000000404240   272 OBJECT  GLOBAL DEFAULT   25 _ZSt4cerr@GLIBCXX_3.4 (2)
    31: 0000000000401060     0 FUNC    GLOBAL DEFAULT  UND _ZSt4endlIcSt11char_trait@GLIBCXX_3.4 (2)
    32: 0000000000404120   272 OBJECT  GLOBAL DEFAULT   25 _ZSt4cout@GLIBCXX_3.4 (2)
    33: 00000000004011a0     0 FUNC    GLOBAL DEFAULT  UND __gxx_personality_v0@CXXABI_1.3 (6)
    34: 0000000000401200     0 FUNC    GLOBAL DEFAULT  UND _ZNSt8ios_base4InitD1Ev@GLIBCXX_3.4 (2)

Symbol table '.symtab' contains 100 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000004002a8     0 SECTION LOCAL  DEFAULT    1 
     2: 00000000004002c4     0 SECTION LOCAL  DEFAULT    2 
     3: 00000000004002e4     0 SECTION LOCAL  DEFAULT    3 
     4: 0000000000400308     0 SECTION LOCAL  DEFAULT    4 
     5: 0000000000400340     0 SECTION LOCAL  DEFAULT    5 
     6: 0000000000400688     0 SECTION LOCAL  DEFAULT    6 
     7: 0000000000400b0a     0 SECTION LOCAL  DEFAULT    7 
     8: 0000000000400b50     0 SECTION LOCAL  DEFAULT    8 
     9: 0000000000400bf0     0 SECTION LOCAL  DEFAULT    9 
    10: 0000000000400c50     0 SECTION LOCAL  DEFAULT   10 
    11: 0000000000401000     0 SECTION LOCAL  DEFAULT   11 
    12: 0000000000401020     0 SECTION LOCAL  DEFAULT   12 
    13: 0000000000401210     0 SECTION LOCAL  DEFAULT   13 
    14: 0000000000401d04     0 SECTION LOCAL  DEFAULT   14 
    15: 0000000000402000     0 SECTION LOCAL  DEFAULT   15 
    16: 00000000004021c8     0 SECTION LOCAL  DEFAULT   16 
    17: 0000000000402230     0 SECTION LOCAL  DEFAULT   17 
    18: 0000000000402408     0 SECTION LOCAL  DEFAULT   18 
    19: 0000000000403db8     0 SECTION LOCAL  DEFAULT   19 
    20: 0000000000403dc8     0 SECTION LOCAL  DEFAULT   20 
    21: 0000000000403dd0     0 SECTION LOCAL  DEFAULT   21 
    22: 0000000000403ff0     0 SECTION LOCAL  DEFAULT   22 
    23: 0000000000404000     0 SECTION LOCAL  DEFAULT   23 
    24: 0000000000404108     0 SECTION LOCAL  DEFAULT   24 
    25: 0000000000404120     0 SECTION LOCAL  DEFAULT   25 
    26: 0000000000000000     0 SECTION LOCAL  DEFAULT   26 
    27: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    28: 0000000000401250     0 FUNC    LOCAL  DEFAULT   13 deregister_tm_clones
    29: 0000000000401280     0 FUNC    LOCAL  DEFAULT   13 register_tm_clones
    30: 00000000004012c0     0 FUNC    LOCAL  DEFAULT   13 __do_global_dtors_aux
    31: 0000000000404350     1 OBJECT  LOCAL  DEFAULT   25 completed.7325
    32: 0000000000403dc8     0 OBJECT  LOCAL  DEFAULT   20 __do_global_dtors_aux_fin
    33: 00000000004012f0     0 FUNC    LOCAL  DEFAULT   13 frame_dummy
    34: 0000000000403db8     0 OBJECT  LOCAL  DEFAULT   19 __frame_dummy_init_array_
    35: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS jiami.cc
    36: 0000000000402008     1 OBJECT  LOCAL  DEFAULT   15 _ZStL19piecewise_construc
    37: 0000000000404351     1 OBJECT  LOCAL  DEFAULT   25 _ZStL8__ioinit
    38: 0000000000401c4d    62 FUNC    LOCAL  DEFAULT   13 _Z41__static_initializati
    39: 0000000000401c8b    21 FUNC    LOCAL  DEFAULT   13 _GLOBAL__sub_I__Z21genera
    40: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    41: 0000000000402404     0 OBJECT  LOCAL  DEFAULT   17 __FRAME_END__
    42: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS 
    43: 00000000004021c8     0 NOTYPE  LOCAL  DEFAULT   16 __GNU_EH_FRAME_HDR
    44: 0000000000403dd0     0 OBJECT  LOCAL  DEFAULT   21 _DYNAMIC
    45: 0000000000403dc8     0 NOTYPE  LOCAL  DEFAULT   19 __init_array_end
    46: 0000000000403db8     0 NOTYPE  LOCAL  DEFAULT   19 __init_array_start
    47: 0000000000404000     0 OBJECT  LOCAL  DEFAULT   23 _GLOBAL_OFFSET_TABLE_
    48: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _Znam@@GLIBCXX_3.4
    49: 0000000000404118     0 NOTYPE  GLOBAL DEFAULT   24 _edata
    50: 0000000000404108     0 NOTYPE  WEAK   DEFAULT   24 data_start
    51: 0000000000402000     4 OBJECT  GLOBAL DEFAULT   15 _IO_stdin_used
    52: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNKSt7__cxx1112basic_str
    53: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_new@@OPENSSL
    54: 00000000004013e5   842 FUNC    GLOBAL DEFAULT   13 _Z11sm2_encryptRKNSt7__cx
    55: 0000000000401a79   468 FUNC    GLOBAL DEFAULT   13 main
    56: 0000000000401060     0 FUNC    GLOBAL DEFAULT  UND _ZSt4endlIcSt11char_trait
    57: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_keygen_init@@OPE
    58: 0000000000404110     0 OBJECT  GLOBAL HIDDEN    24 __dso_handle
    59: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri
    60: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri
    61: 00000000004012f2   243 FUNC    GLOBAL DEFAULT   13 _Z21generate_sm2_key_pair
    62: 000000000040172f   842 FUNC    GLOBAL DEFAULT   13 _Z11sm2_decryptRKNSt7__cx
    63: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_encrypt_init@@OP
    64: 0000000000401d04     0 FUNC    GLOBAL HIDDEN    14 _fini
    65: 0000000000401240     1 FUNC    GLOBAL HIDDEN    13 _dl_relocate_static_pie
    66: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_decrypt@@OPENSSL
    67: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_atexit@@GLIBC_2.2.5
    68: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZStlsIcSt11char_traitsIc
    69: 0000000000401210    43 FUNC    GLOBAL DEFAULT   13 _start
    70: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZStlsISt11char_traitsIcE
    71: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSolsEPFRSoS_E@@GLIBCXX
    72: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSaIcED1Ev@@GLIBCXX_3.4
    73: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_free@@OPENSSL_1_
    74: 0000000000401000     0 FUNC    GLOBAL HIDDEN    11 _init
    75: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri
    76: 0000000000404118     0 OBJECT  GLOBAL HIDDEN    24 __TMC_END__
    77: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_new_id@@OPEN
    78: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_ctrl@@OPENSS
    79: 0000000000404120   272 OBJECT  GLOBAL DEFAULT   25 _ZSt4cout@@GLIBCXX_3.4
    80: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZdaPv@@GLIBCXX_3.4
    81: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt7__cxx1112basic_stri
    82: 0000000000404108     0 NOTYPE  GLOBAL DEFAULT   24 __data_start
    83: 0000000000404358     0 NOTYPE  GLOBAL DEFAULT   25 _end
    84: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_decrypt_init@@OP
    85: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNKSt7__cxx1112basic_str
    86: 0000000000404118     0 NOTYPE  GLOBAL DEFAULT   25 __bss_start
    87: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSt8ios_base4InitC1Ev@@
    88: 0000000000401ca0    93 FUNC    GLOBAL DEFAULT   13 __libc_csu_init
    89: 00000000004011a0     0 FUNC    GLOBAL DEFAULT  UND __gxx_personality_v0@@CXX
    90: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _Unwind_Resume@@GCC_3.0
    91: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _ZNSaIcEC1Ev@@GLIBCXX_3.4
    92: 0000000000401d00     1 FUNC    GLOBAL DEFAULT   13 __libc_csu_fini
    93: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_CTX_free@@OPENSS
    94: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_keygen@@OPENSSL_
    95: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@@GLIBC_
    96: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND EVP_PKEY_encrypt@@OPENSSL
    97: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
    98: 0000000000404240   272 OBJECT  GLOBAL DEFAULT   25 _ZSt4cerr@@GLIBCXX_3.4
    99: 0000000000401200     0 FUNC    GLOBAL DEFAULT  UND _ZNSt8ios_base4InitD1Ev@@

這將顯示指定 ELF 文件的符號(hào)表信息,包括每個(gè)符號(hào)的名稱、地址、大小等。

示例 4:顯示動(dòng)態(tài)段信息

readelf -d sm2_example

linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm),linux,linux,運(yùn)維,服務(wù)器
這將顯示指定 ELF 文件的動(dòng)態(tài)段信息,包括動(dòng)態(tài)鏈接庫(kù)的信息、重定位表的地址等。

三、nm

nm 命令是一個(gè)用于顯示二進(jìn)制目標(biāo)文件(例如可執(zhí)行文件或共享庫(kù)文件)的符號(hào)表的命令行工具。nm 的名稱代表 “name mangling”,它列出了目標(biāo)文件中的符號(hào),包括函數(shù)名稱、變量名稱和其他標(biāo)識(shí)符,以及它們的地址和類型信息。nm 常用于調(diào)試、分析和監(jiān)視二進(jìn)制文件。

3.1 命令語(yǔ)法

nm [OPTIONS] FILE
  • OPTIONS(可選)nm 命令支持的一些選項(xiàng),用于控制輸出格式和顯示特定類型的符號(hào)等。常用選項(xiàng)包括:

    • -A--with-syms:顯示所有符號(hào),包括未公開的符號(hào)。
    • -C--demangle:對(duì) C++ 的函數(shù)名進(jìn)行解碼(去除名稱修飾)。
    • -g--extern-only:只顯示外部符號(hào)。
    • -t--radix:指定輸出地址的基數(shù)(10、16 等)。
    • -u--undefined-only:只顯示未定義的符號(hào)。
    • -D--dynamic:顯示動(dòng)態(tài)符號(hào)(僅在共享庫(kù)文件中有效)。
    • -l--line-numbers:顯示行號(hào)(如果可用)。
    • -S--print-size:顯示符號(hào)的大小。
    • -h--help:顯示幫助信息。
  • FILE(必需):指定要顯示符號(hào)表的二進(jìn)制文件的路徑。

3.2 nm示例

示例 1:顯示所有符號(hào)
nm -A /path/to/your/executable
sm2_example:0000000000404118 B __bss_start
sm2_example:0000000000404350 b completed.7325
sm2_example:                 U __cxa_atexit@@GLIBC_2.2.5
sm2_example:0000000000404108 D __data_start
sm2_example:0000000000404108 W data_start
sm2_example:0000000000401250 t deregister_tm_clones
sm2_example:0000000000401240 T _dl_relocate_static_pie
sm2_example:00000000004012c0 t __do_global_dtors_aux
sm2_example:0000000000403dc8 t __do_global_dtors_aux_fini_array_entry
sm2_example:0000000000404110 D __dso_handle
sm2_example:0000000000403dd0 d _DYNAMIC
sm2_example:0000000000404118 D _edata
sm2_example:0000000000404358 B _end
sm2_example:                 U EVP_PKEY_CTX_ctrl@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_CTX_free@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_CTX_new_id@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_CTX_new@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_decrypt_init@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_decrypt@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_encrypt_init@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_encrypt@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_free@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_keygen_init@@OPENSSL_1_1_0
sm2_example:                 U EVP_PKEY_keygen@@OPENSSL_1_1_0
sm2_example:0000000000401d04 T _fini
sm2_example:00000000004012f0 t frame_dummy
sm2_example:0000000000403db8 t __frame_dummy_init_array_entry
sm2_example:0000000000402404 r __FRAME_END__
sm2_example:0000000000404000 d _GLOBAL_OFFSET_TABLE_
sm2_example:0000000000401c8b t _GLOBAL__sub_I__Z21generate_sm2_key_pairv
sm2_example:                 w __gmon_start__
sm2_example:00000000004021c8 r __GNU_EH_FRAME_HDR
sm2_example:                 U __gxx_personality_v0@@CXXABI_1.3
sm2_example:0000000000401000 T _init
sm2_example:0000000000403dc8 t __init_array_end
sm2_example:0000000000403db8 t __init_array_start
sm2_example:0000000000402000 R _IO_stdin_used
sm2_example:0000000000401d00 T __libc_csu_fini
sm2_example:0000000000401ca0 T __libc_csu_init
sm2_example:                 U __libc_start_main@@GLIBC_2.2.5
sm2_example:0000000000401a79 T main
sm2_example:0000000000401280 t register_tm_clones
sm2_example:0000000000401210 T _start
sm2_example:0000000000404118 D __TMC_END__
sm2_example:                 U _Unwind_Resume@@GCC_3.0
sm2_example:000000000040172f T _Z11sm2_decryptRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP11evp_pkey_st
sm2_example:00000000004013e5 T _Z11sm2_encryptRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP11evp_pkey_st
sm2_example:00000000004012f2 T _Z21generate_sm2_key_pairv
sm2_example:0000000000401c4d t _Z41__static_initialization_and_destruction_0ii
sm2_example:                 U _ZdaPv@@GLIBCXX_3.4
sm2_example:                 U _Znam@@GLIBCXX_3.4
sm2_example:                 U _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv@@GLIBCXX_3.4.21
sm2_example:                 U _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv@@GLIBCXX_3.4.21
sm2_example:                 U _ZNSaIcEC1Ev@@GLIBCXX_3.4
sm2_example:                 U _ZNSaIcED1Ev@@GLIBCXX_3.4
sm2_example:                 U _ZNSolsEPFRSoS_E@@GLIBCXX_3.4
sm2_example:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21
sm2_example:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcmRKS3_@@GLIBCXX_3.4.21
sm2_example:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@@GLIBCXX_3.4.21
sm2_example:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
sm2_example:                 U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
sm2_example:                 U _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
sm2_example:0000000000404240 B _ZSt4cerr@@GLIBCXX_3.4
sm2_example:0000000000404120 B _ZSt4cout@@GLIBCXX_3.4
sm2_example:                 U _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
sm2_example:0000000000402008 r _ZStL19piecewise_construct
sm2_example:0000000000404351 b _ZStL8__ioinit
sm2_example:                 U _ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE@@GLIBCXX_3.4.21
sm2_example:                 U _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4

這將顯示指定的可執(zhí)行文件中的所有符號(hào),包括未公開的符號(hào)。

示例 2:顯示未定義的符號(hào)
nm -u /path/to/your/executable
U __cxa_atexit@@GLIBC_2.2.5
                 U EVP_PKEY_CTX_ctrl@@OPENSSL_1_1_0
                 U EVP_PKEY_CTX_free@@OPENSSL_1_1_0
                 U EVP_PKEY_CTX_new_id@@OPENSSL_1_1_0
                 U EVP_PKEY_CTX_new@@OPENSSL_1_1_0
                 U EVP_PKEY_decrypt_init@@OPENSSL_1_1_0
                 U EVP_PKEY_decrypt@@OPENSSL_1_1_0
                 U EVP_PKEY_encrypt_init@@OPENSSL_1_1_0
                 U EVP_PKEY_encrypt@@OPENSSL_1_1_0
                 U EVP_PKEY_free@@OPENSSL_1_1_0
                 U EVP_PKEY_keygen_init@@OPENSSL_1_1_0
                 U EVP_PKEY_keygen@@OPENSSL_1_1_0
                 w __gmon_start__
                 U __gxx_personality_v0@@CXXABI_1.3
                 U __libc_start_main@@GLIBC_2.2.5
                 U _Unwind_Resume@@GCC_3.0
                 U _ZdaPv@@GLIBCXX_3.4
                 U _Znam@@GLIBCXX_3.4
                 U _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv@@GLIBCXX_3.4.21
                 U _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv@@GLIBCXX_3.4.21
                 U _ZNSaIcEC1Ev@@GLIBCXX_3.4
                 U _ZNSaIcED1Ev@@GLIBCXX_3.4
                 U _ZNSolsEPFRSoS_E@@GLIBCXX_3.4
                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21
                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcmRKS3_@@GLIBCXX_3.4.21
                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@@GLIBCXX_3.4.21
                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
                 U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
                 U _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
                 U _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
                 U _ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE@@GLIBCXX_3.4.21
                 U _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4

這將顯示指定的可執(zhí)行文件中的未定義(未解析)的符號(hào)。

示例 3:解碼 C++ 函數(shù)名
nm -C sm2_example

這將解碼指定的可執(zhí)行文件中的 C++ 函數(shù)名,去除名稱修飾。

0000000000404118 B __bss_start
0000000000404350 b completed.7325
                 U __cxa_atexit@@GLIBC_2.2.5
0000000000404108 D __data_start
0000000000404108 W data_start
0000000000401250 t deregister_tm_clones
0000000000401240 T _dl_relocate_static_pie
00000000004012c0 t __do_global_dtors_aux
0000000000403dc8 t __do_global_dtors_aux_fini_array_entry
0000000000404110 D __dso_handle
0000000000403dd0 d _DYNAMIC
0000000000404118 D _edata
0000000000404358 B _end
                 U EVP_PKEY_CTX_ctrl@@OPENSSL_1_1_0
                 U EVP_PKEY_CTX_free@@OPENSSL_1_1_0
                 U EVP_PKEY_CTX_new_id@@OPENSSL_1_1_0
                 U EVP_PKEY_CTX_new@@OPENSSL_1_1_0
                 U EVP_PKEY_decrypt_init@@OPENSSL_1_1_0
                 U EVP_PKEY_decrypt@@OPENSSL_1_1_0
                 U EVP_PKEY_encrypt_init@@OPENSSL_1_1_0
                 U EVP_PKEY_encrypt@@OPENSSL_1_1_0
                 U EVP_PKEY_free@@OPENSSL_1_1_0
                 U EVP_PKEY_keygen_init@@OPENSSL_1_1_0
                 U EVP_PKEY_keygen@@OPENSSL_1_1_0
0000000000401d04 T _fini
00000000004012f0 t frame_dummy
0000000000403db8 t __frame_dummy_init_array_entry
0000000000402404 r __FRAME_END__
0000000000404000 d _GLOBAL_OFFSET_TABLE_
0000000000401c8b t _GLOBAL__sub_I__Z21generate_sm2_key_pairv
                 w __gmon_start__
00000000004021c8 r __GNU_EH_FRAME_HDR
                 U __gxx_personality_v0@@CXXABI_1.3
0000000000401000 T _init
0000000000403dc8 t __init_array_end
0000000000403db8 t __init_array_start
0000000000402000 R _IO_stdin_used
0000000000401d00 T __libc_csu_fini
0000000000401ca0 T __libc_csu_init
                 U __libc_start_main@@GLIBC_2.2.5
0000000000401a79 T main
0000000000401280 t register_tm_clones
0000000000401210 T _start
0000000000404118 D __TMC_END__
                 U _Unwind_Resume@@GCC_3.0
000000000040172f T sm2_decrypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_pkey_st*)
00000000004013e5 T sm2_encrypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_pkey_st*)
00000000004012f2 T generate_sm2_key_pair()
0000000000401c4d t __static_initialization_and_destruction_0(int, int)
                 U operator delete[](void*)@@GLIBCXX_3.4
                 U operator new[](unsigned long)@@GLIBCXX_3.4
                 U std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::c_str() const@@GLIBCXX_3.4.21
                 U std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::length() const@@GLIBCXX_3.4.21
                 U std::allocator<char>::allocator()@@GLIBCXX_3.4
                 U std::allocator<char>::~allocator()@@GLIBCXX_3.4
                 U std::ostream::operator<<(std::ostream& (*)(std::ostream&))@@GLIBCXX_3.4
                 U std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)@@GLIBCXX_3.4.21
                 U std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned long, std::allocator<char> const&)@@GLIBCXX_3.4.21
                 U std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)@@GLIBCXX_3.4.21
                 U std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()@@GLIBCXX_3.4.21
                 U std::ios_base::Init::Init()@@GLIBCXX_3.4
                 U std::ios_base::Init::~Init()@@GLIBCXX_3.4
0000000000404240 B std::cerr@@GLIBCXX_3.4
0000000000404120 B std::cout@@GLIBCXX_3.4
                 U std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@@GLIBCXX_3.4
0000000000402008 r std::piecewise_construct
0000000000404351 b std::__ioinit
                 U std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@@GLIBCXX_3.4.21
                 U std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@@GLIBCXX_3.4

示例 4:顯示動(dòng)態(tài)符號(hào)
nm -D /path/to/your/shared/library.so

這將顯示指定的共享庫(kù)文件中的動(dòng)態(tài)符號(hào),通常用于共享庫(kù)文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-738423.html

到了這里,關(guān)于linux二進(jìn)制文件分析三大工具詳解(ldd、readelf、nm)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】通過二進(jìn)制文件安裝docker-24.0.2

    本教程測(cè)試環(huán)境為debian9,其他環(huán)境中可能會(huì)出現(xiàn)報(bào)錯(cuò)或安裝失敗的問題 寫入內(nèi)容為:

    2024年02月13日
    瀏覽(51)
  • C# 流Stream詳解(1)——讀寫txt和二進(jìn)制文件

    【讀寫txt文件】 電腦手機(jī)上有各種各樣的文件,例如視頻文件、圖片文件、文本文件,其中讀寫txt文件是最簡(jiǎn)單的,有多種方式, 使用StreamReader和StreamWriter 使用TextReader和TextWriter? ?使用FileStream 使用File類提供的靜態(tài)方法 上面幾種方法代碼都很長(zhǎng),一般來說我們幾乎不會(huì)使

    2024年02月06日
    瀏覽(24)
  • 查看exe和dll等二進(jìn)制文件時(shí)間戳(生成時(shí)間)的工具與方法介紹

    目錄 1、為何要查看二進(jìn)制文件的時(shí)間戳 2、使用PEViewer工具查看文件的時(shí)間戳

    2023年04月14日
    瀏覽(23)
  • 單片機(jī)二進(jìn)制bin(map、反匯編)文件分析(IAP程序跳轉(zhuǎn),PC指針指向問題分析)

    單片機(jī)二進(jìn)制bin(map、反匯編)文件分析(IAP程序跳轉(zhuǎn),PC指針指向問題分析)

    ?? .bin 文件就是二進(jìn)制文件(binary file),這種文件只包含機(jī)器碼。所有的數(shù)據(jù)都是機(jī)器可以執(zhí)行的指令碼、指令參數(shù)或者常量數(shù)據(jù),不包含其它調(diào)試信息。加載到內(nèi)存或者支持XIP(就地執(zhí)行)的存儲(chǔ)器中規(guī)定好的加載地址之后直接從規(guī)定好的運(yùn)行地址開始運(yùn)行即可。 ??

    2024年02月03日
    瀏覽(67)
  • 社區(qū)生態(tài) | openEuler、龍蜥Anolis、統(tǒng)信UOS三大主流操作系統(tǒng)下編譯GreatSQL二進(jìn)制包

    為了更好地支持更多操作系統(tǒng)及相關(guān)生態(tài),GreatSQL社區(qū)決定發(fā)布 openEuler、龍蜥Anolis、統(tǒng)信UOS三個(gè)操作系統(tǒng)下的GreatSQL二進(jìn)制包。 相應(yīng)的二進(jìn)制包可以訪問gitee.com上的 GreatSQL項(xiàng)目? https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.25-17 下載。 本文簡(jiǎn)要記錄在這三個(gè)操作系統(tǒng)下編譯

    2023年04月21日
    瀏覽(22)
  • C語(yǔ)言--文件操作詳解(2)(文本文件和二進(jìn)制文件,文件讀取結(jié)束的判定,用函數(shù)進(jìn)行文件的拷貝,文件緩沖區(qū))

    C語(yǔ)言--文件操作詳解(2)(文本文件和二進(jìn)制文件,文件讀取結(jié)束的判定,用函數(shù)進(jìn)行文件的拷貝,文件緩沖區(qū))

    本篇文章主要介紹了文本文件和二進(jìn)制文件,文件讀取結(jié)束的判定,如何使用函數(shù)進(jìn)行文件的拷貝,文件緩沖區(qū)的相關(guān)知識(shí)。 以及具有保存功能的八功能通訊錄的源碼。 據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件被稱為文本文件或者二進(jìn)制文件。 ①數(shù)據(jù)在內(nèi)存中以二進(jìn)制的形式存儲(chǔ),如

    2024年02月08日
    瀏覽(27)
  • 將數(shù)據(jù)轉(zhuǎn)二進(jìn)制流文件,用PostMan發(fā)送二進(jìn)制流請(qǐng)求

    將數(shù)據(jù)轉(zhuǎn)二進(jìn)制流文件,用PostMan發(fā)送二進(jìn)制流請(qǐng)求

    一、將byte數(shù)組轉(zhuǎn)二進(jìn)制流文件,并保存到本地 byte [] oneshotBytes=new byte[]{78,-29,51,-125,86,-105,56,82,-94,-115,-22,-105,0,-45,-48,-114,27,13,38,45,-24,-15,-13,46,88,-90,-66,-29,52,-23,40,-2,116,2,-115,17,36,15,-84,88,-72,22,-86,41,-90,-19,-58,19,99,-4,-63,29,51,-69,117,-120,121,3,-103,-75,44,64,-58,-34,73,-22,110,-90,92,-35,-18,-128,16,-

    2024年02月15日
    瀏覽(30)
  • 二進(jìn)制漏洞分析與挖掘

    二進(jìn)制漏洞分析與挖掘

    本公眾號(hào)分享的所有技術(shù)僅用于學(xué)習(xí)交流,請(qǐng)勿用于其他非法活動(dòng),如果錯(cuò)漏,歡迎留言指正 《0day安全:軟件漏洞分析技術(shù)第2版》王清電子工業(yè)出版社 入門用,但不全,過時(shí)了,linux部分沒有包含進(jìn)去 漏洞分析、挖掘和利用,安全領(lǐng)域重要和最具挑戰(zhàn)性和對(duì)抗性的分支 應(yīng)

    2024年02月06日
    瀏覽(22)
  • python十進(jìn)制轉(zhuǎn)二進(jìn)制方法詳解

    python十進(jìn)制轉(zhuǎn)二進(jìn)制方法詳解

    ? 在 Python中,十進(jìn)制數(shù)可以轉(zhuǎn)換成二進(jìn)制數(shù)。例如: 但是,十進(jìn)制數(shù)不是直接轉(zhuǎn)換成二進(jìn)制,而是先轉(zhuǎn)換成二進(jìn)制數(shù),再轉(zhuǎn)換成十進(jìn)制。接下來我們來看看具體的實(shí)現(xiàn)方法: 首先我們來看一個(gè)例子: 上面代碼中,使用了循環(huán)遍歷的方法。從這個(gè)例子中我們可以發(fā)現(xiàn),需要遍

    2023年04月19日
    瀏覽(101)
  • java圖片轉(zhuǎn)二進(jìn)制流_java將文件轉(zhuǎn)化成二進(jìn)制流

    二進(jìn)制流的主要編碼格式是base64碼。可以在網(wǎng)上找一些在線轉(zhuǎn)base64編碼的網(wǎng)站進(jìn)行嘗試轉(zhuǎn)換。 例如:http://imgbase64.duoshitong.com/然后通過前端展現(xiàn)和下載。 前端顯示二進(jìn)制流圖片(src中放置base64碼及二進(jìn)制流) 前端下載二進(jìn)制流文件(herf中放置base64碼及二進(jìn)制流,download后面放

    2024年02月06日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包