扩展和嵌入 Python 解释器 用 C 或 C++ 编写模块以使用新模块来扩展 Python 解释器的功能 定义新的函数对象类型方法。 将 Python 解释器嵌入到另一个应用程序中

// https://python3-cookbook.readthedocs.io/zh_CN/latest/c15/p02_write_simple_c_extension_module.html
// http://book.pythontips.com/en/latest/python_c_extension.html
// https://github.com/python/cpython/blob/master/Modules/_testimportmultiple.c
 
// https://python3-cookbook.readthedocs.io/zh_CN/latest/c15/p02_write_simple_c_extension_module.html
// http://book.pythontips.com/en/latest/python_c_extension.html
// https://github.com/python/cpython/blob/master/Modules/_testimportmultiple.c

// Python.h has all the required function definitions to manipulate the Python objects

#include <Python.h>
//This is the function that is called from your python code
static PyObject *add(PyObject *self, PyObject *args)
{

  PyObject *listObj;

  //The input arguments come as a tuple, we parse the args to get the various variables
  //In this case it's only one list variable, which will now be referenced by listObj
  if (!PyArg_ParseTuple(args, "O", &listObj))
    return NULL;

  //length of the list
  long length = PyList_Size(listObj);

  //iterate over all the elements
  long i, sum = 0;
  for (i = 0; i < length; i++)
  {
    //get an element out of the list - the element is also a python objects
    PyObject *temp = PyList_GetItem(listObj, i);
    //we know that object represents an integer - so convert it into C long
    long elem = PyLong_AsLong(temp);
    sum += elem;
  }

  //value returned back to python code - another python object
  //build value here converts the C long to a python integer
  return Py_BuildValue("i", sum);
}

/* This table contains the relavent info mapping -
  <function-name in python module>, <actual-function>,
  <type-of-args the function expects>, <docstring associated with the function>
*/
/* Module method table */
static PyMethodDef AddListMethods[] = {{"add", add, METH_VARARGS, "Greatest add"}, {NULL, NULL, 0, NULL}};

static struct PyModuleDef addListmodule = {PyModuleDef_HEAD_INIT, "addList", "A addList module", -1, AddListMethods};

/*
addList is the module name, and this is the initialization block of the module.
<desired module name>, <the-info-table>, <module's-docstring>
*/
PyMODINIT_FUNC PyInit_addList(void)
{
  return PyModule_Create(&addListmodule);
}

  

from distutils.core import setup, Extension
# https://docs.python.org/3/extending/building.html#building
modulel1 = Extension('addList', ['adder.c'])
setup(name='addList', version='1.0',
      description='This is a demo package',
      author='Martin v. Loewis',
      author_email='martin@v.loewis.de',
      url='https://docs.python.org/extending/building',
      long_description='''
This is really just a demo package.
''', ext_modules=[modulel1])

  

[cpy@localhost extendingCpy]$ sudo py380 setup.py install
running install
running build
running build_ext
building 'addList' extension
creating build
creating build/temp.linux-x86_64-3.8
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.8 -c adder.c -o build/temp.linux-x86_64-3.8/adder.o
creating build/lib.linux-x86_64-3.8
gcc -pthread -shared build/temp.linux-x86_64-3.8/adder.o -o build/lib.linux-x86_64-3.8/addList.cpython-38-x86_64-linux-gnu.so
running install_lib
copying build/lib.linux-x86_64-3.8/addList.cpython-38-x86_64-linux-gnu.so -> /usr/local/lib/python3.8/site-packages
running install_egg_info
Removing /usr/local/lib/python3.8/site-packages/addList-1.0-py3.8.egg-info
Writing /usr/local/lib/python3.8/site-packages/addList-1.0-py3.8.egg-info
[cpy@localhost extendingCpy]$ py380 t.add.py
Sum of List -  [1, 2, 3, 4, 5] 15
[cpy@localhost extendingCpy]$ cat /usr/local/lib/python3.8/site-packages/addList-1.0-py3.8.egg-info
Metadata-Version: 1.0
Name: addList
Version: 1.0
Summary: This is a demo package
Home-page: https://docs.python.org/extending/building
Author: Martin v. Loewis
Author-email: martin@v.loewis.de
License: UNKNOWN
Description:
        This is really just a demo package.

Platform: UNKNOWN
[cpy@localhost extendingCpy]$

  

import addList
l = [1, 2, 3, 4, 5]
print("Sum of List - ", l, addList.add(l))

  

[cpy@localhost extendingCpy]$ ll -as /usr/local/lib/python3.8/site-packages/
总用量 48
 0 drwxr-xr-x  8 root root   259 11月 25 14:43 .
12 drwxr-xr-x 35 root root  8192 11月 25 13:17 ..
 4 -rw-r--r--  1 root root   295 11月 25 14:43 addList-1.0-py3.8.egg-info
20 -rwxr-xr-x  1 root root 18496 11月 25 14:43 addList.cpython-38-x86_64-linux-g                                        nu.so
 4 -rw-r--r--  1 root root   126 11月 25 12:30 easy_install.py
 0 drwxr-xr-x  5 root root    95 11月 25 12:30 pip
 0 drwxr-xr-x  2 root root   130 11月 25 12:30 pip-19.2.3.dist-info
 0 drwxr-xr-x  5 root root    94 11月 25 12:30 pkg_resources
 0 drwxr-xr-x  2 root root   123 11月 25 13:18 __pycache__
 4 -rw-r--r--  1 root root   119 11月 25 13:17 README.txt
 4 drwxr-xr-x  6 root root  4096 11月 25 12:30 setuptools
 0 drwxr-xr-x  2 root root   170 11月 25 12:30 setuptools-41.2.0.dist-info
[cpy@localhost extendingCpy]$ tree build/
build/
├── lib.linux-x86_64-3.8
│   └── addList.cpython-38-x86_64-linux-gnu.so
└── temp.linux-x86_64-3.8
    └── adder.o

2 directories, 2 files
[cpy@localhost extendingCpy]$ readelf -a build/temp.linux-x86_64-3.8/adder.o
ELF 头:
  Magic:  7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  类别:                              ELF64
  数据:                              2 补码,小端序 (little endian)
  版本:                              1 (current)
  OS/ABI:                            UNIX - System V
  ABI 版本:                          0
  类型:                              REL (可重定位文件)
  系统架构:                          Advanced Micro Devices X86-64
  版本:                              0x1
  入口点地址:              0x0
  程序头起点:              0 (bytes into file)
  Start of section headers:          18600 (bytes into file)
  标志:             0x0
  本头的大小:       64 (字节)
  程序头大小:       0 (字节)
  Number of program headers:         0
  节头大小:         64 (字节)
  节头数量:         25
  字符串表索引节头: 24

节头:
  [号] 名称              类型             地址              偏移量
       大小              全体大小          旗标   链接   信息   对齐
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         0000000000000000  00000040
       0000000000000091  0000000000000000  AX       0     0     16
  [ 2] .rela.text        RELA             0000000000000000  000029f0
       00000000000000d8  0000000000000018   I      22     1     8
  [ 3] .data             PROGBITS         0000000000000000  000000d1
       0000000000000000  0000000000000000  WA       0     0     1
  [ 4] .bss              NOBITS           0000000000000000  000000d1
       0000000000000000  0000000000000000  WA       0     0     1
  [ 5] .rodata.str1.1    PROGBITS         0000000000000000  000000d1
       000000000000002e  0000000000000001 AMS       0     0     1
  [ 6] .data.rel.local   PROGBITS         0000000000000000  00000100
       00000000000000c0  0000000000000000  WA       0     0     32
  [ 7] .rela.data.rel.lo RELA             0000000000000000  00002ac8
       0000000000000090  0000000000000018   I      22     6     8
  [ 8] .debug_info       PROGBITS         0000000000000000  000001c0
       00000000000011eb  0000000000000000           0     0     1
  [ 9] .rela.debug_info  RELA             0000000000000000  00002b58
       0000000000001bf0  0000000000000018   I      22     8     8
  [10] .debug_abbrev     PROGBITS         0000000000000000  000013ab
       0000000000000214  0000000000000000           0     0     1
  [11] .debug_loc        PROGBITS         0000000000000000  000015bf
       00000000000001aa  0000000000000000           0     0     1
  [12] .debug_aranges    PROGBITS         0000000000000000  00001769
       0000000000000030  0000000000000000           0     0     1
  [13] .rela.debug_arang RELA             0000000000000000  00004748
       0000000000000030  0000000000000018   I      22    12     8
  [14] .debug_ranges     PROGBITS         0000000000000000  00001799
       0000000000000030  0000000000000000           0     0     1
  [15] .debug_line       PROGBITS         0000000000000000  000017c9
       00000000000001c1  0000000000000000           0     0     1
  [16] .rela.debug_line  RELA             0000000000000000  00004778
       0000000000000018  0000000000000018   I      22    15     8
  [17] .debug_str        PROGBITS         0000000000000000  0000198a
       0000000000000c4f  0000000000000001  MS       0     0     1
  [18] .comment          PROGBITS         0000000000000000  000025d9
       000000000000002e  0000000000000001  MS       0     0     1
  [19] .note.GNU-stack   PROGBITS         0000000000000000  00002607
       0000000000000000  0000000000000000           0     0     1
  [20] .eh_frame         PROGBITS         0000000000000000  00002608
       0000000000000060  0000000000000000   A       0     0     8
  [21] .rela.eh_frame    RELA             0000000000000000  00004790
       0000000000000030  0000000000000018   I      22    20     8
  [22] .symtab           SYMTAB           0000000000000000  00002668
       00000000000002d0  0000000000000018          23    22     8
  [23] .strtab           STRTAB           0000000000000000  00002938
       00000000000000b2  0000000000000000           0     0     1
  [24] .shstrtab         STRTAB           0000000000000000  000047c0
       00000000000000e5  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)

There are no section groups in this file.

本文件中没有程序头。

重定位节 '.rela.text' 位于偏移量 0x29f0 含有 9 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000000008  001300000002 R_X86_64_PC32     0000000000000000 .LC0 - 4
000000000018  001700000004 R_X86_64_PLT32    0000000000000000 PyArg_ParseTuple - 4
00000000002b  001800000004 R_X86_64_PLT32    0000000000000000 PyList_Size - 4
00000000004c  001900000004 R_X86_64_PLT32    0000000000000000 PyList_GetItem - 4
000000000054  001a00000004 R_X86_64_PLT32    0000000000000000 PyLong_AsLong - 4
000000000063  001400000002 R_X86_64_PC32     0000000000000002 .LC1 - 4
00000000006d  001b00000004 R_X86_64_PLT32    0000000000000000 Py_BuildValue - 4
000000000083  000800000002 R_X86_64_PC32     0000000000000000 .data.rel.local - 4
00000000008d  001d00000004 R_X86_64_PLT32    0000000000000000 PyModule_Create2 - 4

重定位节 '.rela.data.rel.local' 位于偏移量 0x2ac8 含有 6 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000000028  000500000001 R_X86_64_64       0000000000000000 .rodata.str1.1 + 4
000000000030  000500000001 R_X86_64_64       0000000000000000 .rodata.str1.1 + c
000000000040  000800000001 R_X86_64_64       0000000000000000 .data.rel.local + 80
000000000080  000500000001 R_X86_64_64       0000000000000000 .rodata.str1.1 + 1d
000000000088  000200000001 R_X86_64_64       0000000000000000 .text + 0
000000000098  000500000001 R_X86_64_64       0000000000000000 .rodata.str1.1 + 21

重定位节 '.rela.debug_info' 位于偏移量 0x2b58 含有 298 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000000006  000b0000000a R_X86_64_32       0000000000000000 .debug_abbrev + 0
00000000000c  00100000000a R_X86_64_32       0000000000000000 .debug_str + a3c
000000000011  00100000000a R_X86_64_32       0000000000000000 .debug_str + 261
000000000015  00100000000a R_X86_64_32       0000000000000000 .debug_str + 54c
000000000019  000200000001 R_X86_64_64       0000000000000000 .text + 0
000000000029  000f0000000a R_X86_64_32       0000000000000000 .debug_line + 0
00000000002e  00100000000a R_X86_64_32       0000000000000000 .debug_str + 0
00000000003b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4cc
000000000042  00100000000a R_X86_64_32       0000000000000000 .debug_str + 28c
000000000049  00100000000a R_X86_64_32       0000000000000000 .debug_str + bbc
000000000050  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6ee
000000000057  00100000000a R_X86_64_32       0000000000000000 .debug_str + 73
00000000005e  00100000000a R_X86_64_32       0000000000000000 .debug_str + a1f
00000000006c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1ed
000000000071  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8a0
00000000007c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 983
000000000089  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7
000000000090  00100000000a R_X86_64_32       0000000000000000 .debug_str + 48
0000000000a3  00100000000a R_X86_64_32       0000000000000000 .debug_str + 33e
0000000000a8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 829
0000000000b3  00100000000a R_X86_64_32       0000000000000000 .debug_str + 269
0000000000bf  00100000000a R_X86_64_32       0000000000000000 .debug_str + 78e
0000000000cb  00100000000a R_X86_64_32       0000000000000000 .debug_str + 36e
0000000000d7  00100000000a R_X86_64_32       0000000000000000 .debug_str + b64
0000000000e3  00100000000a R_X86_64_32       0000000000000000 .debug_str + 509
0000000000ef  00100000000a R_X86_64_32       0000000000000000 .debug_str + d3
0000000000fb  00100000000a R_X86_64_32       0000000000000000 .debug_str + bef
000000000108  00100000000a R_X86_64_32       0000000000000000 .debug_str + 653
000000000115  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6e1
000000000122  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9e6
00000000012f  00100000000a R_X86_64_32       0000000000000000 .debug_str + 136
00000000013c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 92e
000000000149  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7f
000000000156  00100000000a R_X86_64_32       0000000000000000 .debug_str + 39f
000000000163  00100000000a R_X86_64_32       0000000000000000 .debug_str + 14c
000000000170  00100000000a R_X86_64_32       0000000000000000 .debug_str + b94
00000000017d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4f5
00000000018a  00100000000a R_X86_64_32       0000000000000000 .debug_str + 589
000000000197  00100000000a R_X86_64_32       0000000000000000 .debug_str + 15b
0000000001a4  00100000000a R_X86_64_32       0000000000000000 .debug_str + aac
0000000001b1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 93e
0000000001be  00100000000a R_X86_64_32       0000000000000000 .debug_str + e2
0000000001cb  00100000000a R_X86_64_32       0000000000000000 .debug_str + 445
0000000001d8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 715
0000000001e5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 71c
0000000001f2  00100000000a R_X86_64_32       0000000000000000 .debug_str + 723
0000000001ff  00100000000a R_X86_64_32       0000000000000000 .debug_str + 72a
00000000020c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 731
000000000219  00100000000a R_X86_64_32       0000000000000000 .debug_str + 795
000000000226  00100000000a R_X86_64_32       0000000000000000 .debug_str + 521
000000000234  00100000000a R_X86_64_32       0000000000000000 .debug_str + 35b
00000000023b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 216
000000000247  00100000000a R_X86_64_32       0000000000000000 .debug_str + 97d
000000000253  00100000000a R_X86_64_32       0000000000000000 .debug_str + 745
00000000025f  00100000000a R_X86_64_32       0000000000000000 .debug_str + 37b
0000000002a9  00100000000a R_X86_64_32       0000000000000000 .debug_str + 153
0000000002b6  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5da
0000000002bd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 86e
0000000002c2  00100000000a R_X86_64_32       0000000000000000 .debug_str + 88c
0000000002cd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1e3
0000000002da  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6b6
0000000002e1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 63b
0000000002ee  00100000000a R_X86_64_32       0000000000000000 .debug_str + 845
0000000002f4  00100000000a R_X86_64_32       0000000000000000 .debug_str + bb
0000000002fa  00100000000a R_X86_64_32       0000000000000000 .debug_str + 672
000000000301  00100000000a R_X86_64_32       0000000000000000 .debug_str + a96
00000000030d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 20a
000000000319  00100000000a R_X86_64_32       0000000000000000 .debug_str + 578
000000000325  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4de
000000000331  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8d8
00000000033e  00100000000a R_X86_64_32       0000000000000000 .debug_str + 196
00000000034a  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1d9
000000000356  00100000000a R_X86_64_32       0000000000000000 .debug_str + bad
000000000363  00100000000a R_X86_64_32       0000000000000000 .debug_str + 56c
000000000370  00100000000a R_X86_64_32       0000000000000000 .debug_str + b81
00000000037c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 18e
000000000388  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9fb
000000000394  00100000000a R_X86_64_32       0000000000000000 .debug_str + a30
0000000003a0  00100000000a R_X86_64_32       0000000000000000 .debug_str + 68
0000000003ac  00100000000a R_X86_64_32       0000000000000000 .debug_str + 310
0000000003b8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9db
0000000003c4  00100000000a R_X86_64_32       0000000000000000 .debug_str + 46f
0000000003d0  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8a8
0000000003dc  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9b
0000000003e8  00100000000a R_X86_64_32       0000000000000000 .debug_str + aea
0000000003f4  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8c
000000000400  00100000000a R_X86_64_32       0000000000000000 .debug_str + 44d
00000000040c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 366
000000000418  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6ae
000000000424  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4c5
000000000430  00100000000a R_X86_64_32       0000000000000000 .debug_str + 393
00000000043c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7c3
000000000448  00100000000a R_X86_64_32       0000000000000000 .debug_str + 948
000000000454  00100000000a R_X86_64_32       0000000000000000 .debug_str + 580
000000000460  00100000000a R_X86_64_32       0000000000000000 .debug_str + 285
00000000046c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 416
000000000478  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6a5
000000000484  00100000000a R_X86_64_32       0000000000000000 .debug_str + 52
000000000490  00100000000a R_X86_64_32       0000000000000000 .debug_str + 167
00000000049c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 221
0000000004a8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 699
0000000004b4  00100000000a R_X86_64_32       0000000000000000 .debug_str + 12b
0000000004c0  00100000000a R_X86_64_32       0000000000000000 .debug_str + 765
0000000004cc  00100000000a R_X86_64_32       0000000000000000 .debug_str + 918
0000000004d8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2f1
0000000004e5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3e7
0000000004f2  00100000000a R_X86_64_32       0000000000000000 .debug_str + bd6
0000000004ff  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3bd
00000000050c  00100000000a R_X86_64_32       0000000000000000 .debug_str + c41
000000000519  00100000000a R_X86_64_32       0000000000000000 .debug_str + 144
000000000526  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8bd
000000000533  00100000000a R_X86_64_32       0000000000000000 .debug_str + b9c
000000000540  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2ba
00000000054d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 179
00000000055a  00100000000a R_X86_64_32       0000000000000000 .debug_str + 122
000000000567  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1a5
000000000574  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9f2
000000000581  00100000000a R_X86_64_32       0000000000000000 .debug_str + c2b
00000000058e  00100000000a R_X86_64_32       0000000000000000 .debug_str + 922
00000000059b  00100000000a R_X86_64_32       0000000000000000 .debug_str + b7a
0000000005a8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9cc
0000000005b5  00100000000a R_X86_64_32       0000000000000000 .debug_str + b39
0000000005c3  00100000000a R_X86_64_32       0000000000000000 .debug_str + 955
0000000005d1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9c3
0000000005e6  00100000000a R_X86_64_32       0000000000000000 .debug_str + 690
0000000005f9  00100000000a R_X86_64_32       0000000000000000 .debug_str + b81
000000000605  00100000000a R_X86_64_32       0000000000000000 .debug_str + 688
000000000612  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3a8
00000000061d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 40c
000000000643  00100000000a R_X86_64_32       0000000000000000 .debug_str + a14
000000000668  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1bc
000000000692  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6d9
0000000006b2  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3ca
0000000006d2  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5b9
0000000006f7  00100000000a R_X86_64_32       0000000000000000 .debug_str + a3
000000000721  00100000000a R_X86_64_32       0000000000000000 .debug_str + 963
00000000074b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 10
000000000770  00100000000a R_X86_64_32       0000000000000000 .debug_str + 83b
000000000795  00100000000a R_X86_64_32       0000000000000000 .debug_str + 489
0000000007bf  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8fb
0000000007db  00100000000a R_X86_64_32       0000000000000000 .debug_str + b89
0000000007f7  00100000000a R_X86_64_32       0000000000000000 .debug_str + b1c
00000000081c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 386
000000000827  00100000000a R_X86_64_32       0000000000000000 .debug_str + 770
000000000851  00100000000a R_X86_64_32       0000000000000000 .debug_str + b0f
00000000085c  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3b4
000000000867  00100000000a R_X86_64_32       0000000000000000 .debug_str + 785
000000000887  00100000000a R_X86_64_32       0000000000000000 .debug_str + 98d
0000000008b1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4fd
0000000008bc  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7f3
0000000008c7  00100000000a R_X86_64_32       0000000000000000 .debug_str + 82e
0000000008d2  00100000000a R_X86_64_32       0000000000000000 .debug_str + 738
0000000008dd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 897
0000000008e8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 43d
000000000912  00100000000a R_X86_64_32       0000000000000000 .debug_str + 23e
000000000937  00100000000a R_X86_64_32       0000000000000000 .debug_str + b28
000000000967  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3de
000000000973  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5b0
00000000097f  00100000000a R_X86_64_32       0000000000000000 .debug_str + 356
00000000098b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4e9
000000000997  00100000000a R_X86_64_32       0000000000000000 .debug_str + b57
0000000009a3  00100000000a R_X86_64_32       0000000000000000 .debug_str + b3
0000000009af  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6fb
0000000009bb  00100000000a R_X86_64_32       0000000000000000 .debug_str + 642
0000000009ce  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2d6
0000000009d9  00100000000a R_X86_64_32       0000000000000000 .debug_str + e8
000000000a09  00100000000a R_X86_64_32       0000000000000000 .debug_str + 109
000000000a2a  00100000000a R_X86_64_32       0000000000000000 .debug_str + 609
000000000a6d  00100000000a R_X86_64_32       0000000000000000 .debug_str + f6
000000000a79  00100000000a R_X86_64_32       0000000000000000 .debug_str + fd
000000000a85  00100000000a R_X86_64_32       0000000000000000 .debug_str + ade
000000000a91  00100000000a R_X86_64_32       0000000000000000 .debug_str + 325
000000000a9d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 248
000000000aa9  00100000000a R_X86_64_32       0000000000000000 .debug_str + bfd
000000000ab5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3ef
000000000ac1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 759
000000000acd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 182
000000000ad9  00100000000a R_X86_64_32       0000000000000000 .debug_str + 910
000000000ae5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7e1
000000000af1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 402
000000000afd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8ce
000000000b09  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4be
000000000b15  00100000000a R_X86_64_32       0000000000000000 .debug_str + 11b
000000000b21  00100000000a R_X86_64_32       0000000000000000 .debug_str + b33
000000000b2d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 61
000000000b39  00100000000a R_X86_64_32       0000000000000000 .debug_str + 30
000000000b45  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2b1
000000000b51  00100000000a R_X86_64_32       0000000000000000 .debug_str + 47a
000000000b5d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 45b
000000000b69  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1f6
000000000b75  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1b
000000000b81  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2ff
000000000b8d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5e8
000000000b99  00100000000a R_X86_64_32       0000000000000000 .debug_str + acc
000000000ba5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8e3
000000000bb1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 496
000000000bbd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 229
000000000bc9  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1ac
000000000bd5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 252
000000000be1  00100000000a R_X86_64_32       0000000000000000 .debug_str + af7
000000000bed  00100000000a R_X86_64_32       0000000000000000 .debug_str + 29a
000000000bfa  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8b4
000000000c07  00100000000a R_X86_64_32       0000000000000000 .debug_str + 343
000000000c14  00100000000a R_X86_64_32       0000000000000000 .debug_str + 422
000000000c22  00100000000a R_X86_64_32       0000000000000000 .debug_str + 52a
000000000c35  00100000000a R_X86_64_32       0000000000000000 .debug_str + ba3
000000000c41  00100000000a R_X86_64_32       0000000000000000 .debug_str + 517
000000000c4d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2c2
000000000c59  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7bb
000000000c65  00100000000a R_X86_64_32       0000000000000000 .debug_str + c0b
000000000c71  00100000000a R_X86_64_32       0000000000000000 .debug_str + 971
000000000c7d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7aa
000000000c89  00100000000a R_X86_64_32       0000000000000000 .debug_str + 904
000000000c95  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7cf
000000000ca1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 53a
000000000cae  00100000000a R_X86_64_32       0000000000000000 .debug_str + b45
000000000cc1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2cc
000000000ccd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 861
000000000cd9  00100000000a R_X86_64_32       0000000000000000 .debug_str + 1c8
000000000ce6  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2e0
000000000cf9  00100000000a R_X86_64_32       0000000000000000 .debug_str + c22
000000000d05  00100000000a R_X86_64_32       0000000000000000 .debug_str + 77c
000000000d11  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8f2
000000000d1e  00100000000a R_X86_64_32       0000000000000000 .debug_str + 79b
000000000d31  00100000000a R_X86_64_32       0000000000000000 .debug_str + 811
000000000d3d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6bc
000000000d4a  00100000000a R_X86_64_32       0000000000000000 .debug_str + 272
000000000d73  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3c
000000000d7f  00100000000a R_X86_64_32       0000000000000000 .debug_str + c39
000000000d8b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 64b
000000000d97  00100000000a R_X86_64_32       0000000000000000 .debug_str + b71
000000000da3  00100000000a R_X86_64_32       0000000000000000 .debug_str + b5d
000000000db6  00100000000a R_X86_64_32       0000000000000000 .debug_str + 332
000000000dc1  00100000000a R_X86_64_32       0000000000000000 .debug_str + 999
000000000dcd  00100000000a R_X86_64_32       0000000000000000 .debug_str + a08
000000000dfd  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4b6
000000000e35  00100000000a R_X86_64_32       0000000000000000 .debug_str + 6cd
000000000e40  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3c
000000000e51  00100000000a R_X86_64_32       0000000000000000 .debug_str + abb
000000000e5d  00100000000a R_X86_64_32       0000000000000000 .debug_str + b81
000000000e69  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9bc
000000000e75  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5c6
000000000e81  00100000000a R_X86_64_32       0000000000000000 .debug_str + 237
000000000e99  00100000000a R_X86_64_32       0000000000000000 .debug_str + abb
000000000ea4  00100000000a R_X86_64_32       0000000000000000 .debug_str + 661
000000000eb0  00100000000a R_X86_64_32       0000000000000000 .debug_str + be3
000000000ebc  00100000000a R_X86_64_32       0000000000000000 .debug_str + 2f9
000000000ec9  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5ce
000000000ed5  00100000000a R_X86_64_32       0000000000000000 .debug_str + be8
000000000ee1  00100000000a R_X86_64_32       0000000000000000 .debug_str + a0d
000000000eed  00100000000a R_X86_64_32       0000000000000000 .debug_str + 618
000000000ef9  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3fb
000000000f05  00100000000a R_X86_64_32       0000000000000000 .debug_str + c18
000000000f11  00100000000a R_X86_64_32       0000000000000000 .debug_str + 7eb
000000000f1d  00100000000a R_X86_64_32       0000000000000000 .debug_str + 81e
000000000f29  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5a8
000000000f35  00100000000a R_X86_64_32       0000000000000000 .debug_str + bb5
000000000f62  00100000000a R_X86_64_32       0000000000000000 .debug_str + 19e
000000000f6d  00100000000a R_X86_64_32       0000000000000000 .debug_str + a29
000000000fa1  000200000001 R_X86_64_64       0000000000000000 .text + 0
000000000fb8  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4f0
000000000fc2  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + 0
000000000fc7  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5a3
000000000fd1  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + 39
000000000fd6  00100000000a R_X86_64_32       0000000000000000 .debug_str + 8c6
000000000fe4  00100000000a R_X86_64_32       0000000000000000 .debug_str + 885
000000000fee  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + 85
000000000ffb  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + bb
00000000100a  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + 12d
00000000100f  000e0000000a R_X86_64_32       0000000000000000 .debug_ranges + 0
000000001018  00100000000a R_X86_64_32       0000000000000000 .debug_str + c06
000000001022  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + 164
000000001027  00100000000a R_X86_64_32       0000000000000000 .debug_str + 280
000000001031  000c0000000a R_X86_64_32       0000000000000000 .debug_loc + 187
000000001036  000200000001 R_X86_64_64       0000000000000000 .text + 50
00000000104e  000200000001 R_X86_64_64       0000000000000000 .text + 58
00000000105c  000200000001 R_X86_64_64       0000000000000000 .text + 1c
000000001078  000500000001 R_X86_64_64       0000000000000000 .rodata.str1.1 + 0
000000001088  000200000001 R_X86_64_64       0000000000000000 .text + 2f
000000001095  000200000001 R_X86_64_64       0000000000000000 .text + 71
0000000010a6  000500000001 R_X86_64_64       0000000000000000 .rodata.str1.1 + 2
0000000010b7  00100000000a R_X86_64_32       0000000000000000 .debug_str + 61e
0000000010c1  000200000001 R_X86_64_64       0000000000000000 .text + 80
0000000010d8  000200000001 R_X86_64_64       0000000000000000 .text + 91
0000000010e9  000800000001 R_X86_64_64       0000000000000000 .data.rel.local + 0
00000000110b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 5fa
000000001117  000800000001 R_X86_64_64       0000000000000000 .data.rel.local + 80
000000001120  00100000000a R_X86_64_32       0000000000000000 .debug_str + 74b
00000000112c  000800000001 R_X86_64_64       0000000000000000 .data.rel.local + 0
000000001135  00100000000a R_X86_64_32       0000000000000000 .debug_str + 380
000000001140  00100000000a R_X86_64_32       0000000000000000 .debug_str + bcf
00000000114b  00100000000a R_X86_64_32       0000000000000000 .debug_str + 9a5
000000001156  00100000000a R_X86_64_32       0000000000000000 .debug_str + 706
000000001170  00100000000a R_X86_64_32       0000000000000000 .debug_str + 62d
000000001185  00100000000a R_X86_64_32       0000000000000000 .debug_str + 800
0000000011a0  00100000000a R_X86_64_32       0000000000000000 .debug_str + 3d2
0000000011b5  00100000000a R_X86_64_32       0000000000000000 .debug_str + 595
0000000011cb  00100000000a R_X86_64_32       0000000000000000 .debug_str + 4a5

重定位节 '.rela.debug_aranges' 位于偏移量 0x4748 含有 2 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000000006  000a0000000a R_X86_64_32       0000000000000000 .debug_info + 0
000000000010  000200000001 R_X86_64_64       0000000000000000 .text + 0

重定位节 '.rela.debug_line' 位于偏移量 0x4778 含有 1 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
00000000017c  000200000001 R_X86_64_64       0000000000000000 .text + 0

重定位节 '.rela.eh_frame' 位于偏移量 0x4790 含有 2 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000000020  000200000002 R_X86_64_PC32     0000000000000000 .text + 0
000000000050  000200000002 R_X86_64_PC32     0000000000000000 .text + 80

The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.

Symbol table '.symtab' contains 30 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS adder.c
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    5
     6: 0000000000000000   122 FUNC    LOCAL  DEFAULT    1 add
     7: 0000000000000000   104 OBJECT  LOCAL  DEFAULT    6 addListmodule
     8: 0000000000000000     0 SECTION LOCAL  DEFAULT    6
     9: 0000000000000080    64 OBJECT  LOCAL  DEFAULT    6 AddListMethods
    10: 0000000000000000     0 SECTION LOCAL  DEFAULT    8
    11: 0000000000000000     0 SECTION LOCAL  DEFAULT   10
    12: 0000000000000000     0 SECTION LOCAL  DEFAULT   11
    13: 0000000000000000     0 SECTION LOCAL  DEFAULT   12
    14: 0000000000000000     0 SECTION LOCAL  DEFAULT   14
    15: 0000000000000000     0 SECTION LOCAL  DEFAULT   15
    16: 0000000000000000     0 SECTION LOCAL  DEFAULT   17
    17: 0000000000000000     0 SECTION LOCAL  DEFAULT   19
    18: 0000000000000000     0 SECTION LOCAL  DEFAULT   20
    19: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    5 .LC0
    20: 0000000000000002     0 NOTYPE  LOCAL  DEFAULT    5 .LC1
    21: 0000000000000000     0 SECTION LOCAL  DEFAULT   18
    22: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _GLOBAL_OFFSET_TABLE_
    23: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyArg_ParseTuple
    24: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyList_Size
    25: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyList_GetItem
    26: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyLong_AsLong
    27: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Py_BuildValue
    28: 0000000000000080    17 FUNC    GLOBAL DEFAULT    1 PyInit_addList
    29: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyModule_Create2

No version information found in this file.
[cpy@localhost extendingCpy]$ readelf -a build/lib.linux-x86_64-3.8/addList.cpython-38-x86_64-linux-gnu.so
ELF 头:
  Magic:  7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  类别:                              ELF64
  数据:                              2 补码,小端序 (little endian)
  版本:                              1 (current)
  OS/ABI:                            UNIX - System V
  ABI 版本:                          0
  类型:                              DYN (共享目标文件)
  系统架构:                          Advanced Micro Devices X86-64
  版本:                              0x1
  入口点地址:              0x800
  程序头起点:              64 (bytes into file)
  Start of section headers:          16192 (bytes into file)
  标志:             0x0
  本头的大小:       64 (字节)
  程序头大小:       56 (字节)
  Number of program headers:         7
  节头大小:         64 (字节)
  节头数量:         36
  字符串表索引节头: 35

节头:
  [号] 名称              类型             地址              偏移量
       大小              全体大小          旗标   链接   信息   对齐
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .note.gnu.build-i NOTE             00000000000001c8  000001c8
       0000000000000024  0000000000000000   A       0     0     4
  [ 2] .gnu.hash         GNU_HASH         00000000000001f0  000001f0
       000000000000003c  0000000000000000   A       3     0     8
  [ 3] .dynsym           DYNSYM           0000000000000230  00000230
       00000000000001b0  0000000000000018   A       4     1     8
  [ 4] .dynstr           STRTAB           00000000000003e0  000003e0
       000000000000011b  0000000000000000   A       0     0     1
  [ 5] .gnu.version      VERSYM           00000000000004fc  000004fc
       0000000000000024  0000000000000002   A       3     0     2
  [ 6] .gnu.version_r    VERNEED          0000000000000520  00000520
       0000000000000020  0000000000000000   A       4     1     8
  [ 7] .rela.dyn         RELA             0000000000000540  00000540
       0000000000000150  0000000000000018   A       3     0     8
  [ 8] .rela.plt         RELA             0000000000000690  00000690
       00000000000000c0  0000000000000018  AI       3    22     8
  [ 9] .init             PROGBITS         0000000000000750  00000750
       000000000000001a  0000000000000000  AX       0     0     4
  [10] .plt              PROGBITS         0000000000000770  00000770
       0000000000000090  0000000000000010  AX       0     0     16
  [11] .text             PROGBITS         0000000000000800  00000800
       0000000000000181  0000000000000000  AX       0     0     16
  [12] .fini             PROGBITS         0000000000000984  00000984
       0000000000000009  0000000000000000  AX       0     0     4
  [13] .rodata           PROGBITS         000000000000098d  0000098d
       000000000000002a  0000000000000001 AMS       0     0     1
  [14] .eh_frame_hdr     PROGBITS         00000000000009b8  000009b8
       0000000000000024  0000000000000000   A       0     0     4
  [15] .eh_frame         PROGBITS         00000000000009e0  000009e0
       000000000000008c  0000000000000000   A       0     0     8
  [16] .init_array       INIT_ARRAY       0000000000200de8  00000de8
       0000000000000008  0000000000000008  WA       0     0     8
  [17] .fini_array       FINI_ARRAY       0000000000200df0  00000df0
       0000000000000008  0000000000000008  WA       0     0     8
  [18] .jcr              PROGBITS         0000000000200df8  00000df8
       0000000000000008  0000000000000000  WA       0     0     8
  [19] .data.rel.ro      PROGBITS         0000000000200e00  00000e00
       0000000000000008  0000000000000000  WA       0     0     8
  [20] .dynamic          DYNAMIC          0000000000200e08  00000e08
       00000000000001d0  0000000000000010  WA       4     0     8
  [21] .got              PROGBITS         0000000000200fd8  00000fd8
       0000000000000028  0000000000000008  WA       0     0     8
  [22] .got.plt          PROGBITS         0000000000201000  00001000
       0000000000000058  0000000000000008  WA       0     0     8
  [23] .data             PROGBITS         0000000000201060  00001060
       00000000000000c0  0000000000000000  WA       0     0     32
  [24] .bss              NOBITS           0000000000201120  00001120
       0000000000000008  0000000000000000  WA       0     0     1
  [25] .comment          PROGBITS         0000000000000000  00001120
       000000000000002d  0000000000000001  MS       0     0     1
  [26] .debug_aranges    PROGBITS         0000000000000000  0000114d
       0000000000000030  0000000000000000           0     0     1
  [27] .debug_info       PROGBITS         0000000000000000  0000117d
       00000000000011eb  0000000000000000           0     0     1
  [28] .debug_abbrev     PROGBITS         0000000000000000  00002368
       0000000000000214  0000000000000000           0     0     1
  [29] .debug_line       PROGBITS         0000000000000000  0000257c
       00000000000001c1  0000000000000000           0     0     1
  [30] .debug_str        PROGBITS         0000000000000000  0000273d
       0000000000000bd8  0000000000000001  MS       0     0     1
  [31] .debug_loc        PROGBITS         0000000000000000  00003315
       00000000000001aa  0000000000000000           0     0     1
  [32] .debug_ranges     PROGBITS         0000000000000000  000034bf
       0000000000000030  0000000000000000           0     0     1
  [33] .symtab           SYMTAB           0000000000000000  000034f0
       00000000000006c0  0000000000000018          34    55     8
  [34] .strtab           STRTAB           0000000000000000  00003bb0
       0000000000000234  0000000000000000           0     0     1
  [35] .shstrtab         STRTAB           0000000000000000  00003de4
       0000000000000158  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)

There are no section groups in this file.

程序头:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000a6c 0x0000000000000a6c  R E    200000
  LOAD           0x0000000000000de8 0x0000000000200de8 0x0000000000200de8
                 0x0000000000000338 0x0000000000000340  RW     200000
  DYNAMIC        0x0000000000000e08 0x0000000000200e08 0x0000000000200e08
                 0x00000000000001d0 0x00000000000001d0  RW     8
  NOTE           0x00000000000001c8 0x00000000000001c8 0x00000000000001c8
                 0x0000000000000024 0x0000000000000024  R      4
  GNU_EH_FRAME   0x00000000000009b8 0x00000000000009b8 0x00000000000009b8
                 0x0000000000000024 0x0000000000000024  R      4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     10
  GNU_RELRO      0x0000000000000de8 0x0000000000200de8 0x0000000000200de8
                 0x0000000000000218 0x0000000000000218  R      1

 Section to Segment mapping:
  段节...
   00     .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
   01     .init_array .fini_array .jcr .data.rel.ro .dynamic .got .got.plt .data .bss
   02     .dynamic
   03     .note.gnu.build-id
   04     .eh_frame_hdr
   05
   06     .init_array .fini_array .jcr .data.rel.ro .dynamic .got

Dynamic section at offset 0xe08 contains 25 entries:
  标记        类型                         名称/值
 0x0000000000000001 (NEEDED)             共享库:[libpthread.so.0]
 0x0000000000000001 (NEEDED)             共享库:[libc.so.6]
 0x000000000000000c (INIT)               0x750
 0x000000000000000d (FINI)               0x984
 0x0000000000000019 (INIT_ARRAY)         0x200de8
 0x000000000000001b (INIT_ARRAYSZ)       8 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x200df0
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x1f0
 0x0000000000000005 (STRTAB)             0x3e0
 0x0000000000000006 (SYMTAB)             0x230
 0x000000000000000a (STRSZ)              283 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000003 (PLTGOT)             0x201000
 0x0000000000000002 (PLTRELSZ)           192 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x690
 0x0000000000000007 (RELA)               0x540
 0x0000000000000008 (RELASZ)             336 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffe (VERNEED)            0x520
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x4fc
 0x000000006ffffff9 (RELACOUNT)          9
 0x0000000000000000 (NULL)               0x0

重定位节 '.rela.dyn' 位于偏移量 0x540 含有 14 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000200de8  000000000008 R_X86_64_RELATIVE                    8b0
000000200df0  000000000008 R_X86_64_RELATIVE                    870
000000200e00  000000000008 R_X86_64_RELATIVE                    200e00
000000201088  000000000008 R_X86_64_RELATIVE                    991
000000201090  000000000008 R_X86_64_RELATIVE                    999
0000002010a0  000000000008 R_X86_64_RELATIVE                    2010e0
0000002010e0  000000000008 R_X86_64_RELATIVE                    9b3
0000002010e8  000000000008 R_X86_64_RELATIVE                    8f0
0000002010f8  000000000008 R_X86_64_RELATIVE                    9aa
000000200fd8  000100000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_deregisterTMClone + 0
000000200fe0  000200000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
000000200fe8  000800000006 R_X86_64_GLOB_DAT 0000000000000000 _Jv_RegisterClasses + 0
000000200ff0  000900000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_registerTMCloneTa + 0
000000200ff8  000b00000006 R_X86_64_GLOB_DAT 0000000000000000 __cxa_finalize@GLIBC_2.2.5 + 0

重定位节 '.rela.plt' 位于偏移量 0x690 含有 8 个条目:
  偏移量          信息           类型           符号值        符号名称 + 加数
000000201018  000200000007 R_X86_64_JUMP_SLO 0000000000000000 __gmon_start__ + 0
000000201020  000300000007 R_X86_64_JUMP_SLO 0000000000000000 Py_BuildValue + 0
000000201028  000400000007 R_X86_64_JUMP_SLO 0000000000000000 PyModule_Create2 + 0
000000201030  000500000007 R_X86_64_JUMP_SLO 0000000000000000 PyLong_AsLong + 0
000000201038  000600000007 R_X86_64_JUMP_SLO 0000000000000000 PyArg_ParseTuple + 0
000000201040  000700000007 R_X86_64_JUMP_SLO 0000000000000000 PyList_Size + 0
000000201048  000a00000007 R_X86_64_JUMP_SLO 0000000000000000 PyList_GetItem + 0
000000201050  000b00000007 R_X86_64_JUMP_SLO 0000000000000000 __cxa_finalize@GLIBC_2.2.5 + 0

The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.

Symbol table '.dynsym' contains 18 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
     2: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
     3: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Py_BuildValue
     4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyModule_Create2
     5: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyLong_AsLong
     6: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyArg_ParseTuple
     7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyList_Size
     8: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _Jv_RegisterClasses
     9: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
    10: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyList_GetItem
    11: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND __cxa_finalize@GLIBC_2.2.5 (2)
    12: 0000000000201120     0 NOTYPE  GLOBAL DEFAULT   23 _edata
    13: 0000000000000970    17 FUNC    GLOBAL DEFAULT   11 PyInit_addList
    14: 0000000000201128     0 NOTYPE  GLOBAL DEFAULT   24 _end
    15: 0000000000201120     0 NOTYPE  GLOBAL DEFAULT   24 __bss_start
    16: 0000000000000750     0 FUNC    GLOBAL DEFAULT    9 _init
    17: 0000000000000984     0 FUNC    GLOBAL DEFAULT   12 _fini

Symbol table '.symtab' contains 72 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000000001c8     0 SECTION LOCAL  DEFAULT    1
     2: 00000000000001f0     0 SECTION LOCAL  DEFAULT    2
     3: 0000000000000230     0 SECTION LOCAL  DEFAULT    3
     4: 00000000000003e0     0 SECTION LOCAL  DEFAULT    4
     5: 00000000000004fc     0 SECTION LOCAL  DEFAULT    5
     6: 0000000000000520     0 SECTION LOCAL  DEFAULT    6
     7: 0000000000000540     0 SECTION LOCAL  DEFAULT    7
     8: 0000000000000690     0 SECTION LOCAL  DEFAULT    8
     9: 0000000000000750     0 SECTION LOCAL  DEFAULT    9
    10: 0000000000000770     0 SECTION LOCAL  DEFAULT   10
    11: 0000000000000800     0 SECTION LOCAL  DEFAULT   11
    12: 0000000000000984     0 SECTION LOCAL  DEFAULT   12
    13: 000000000000098d     0 SECTION LOCAL  DEFAULT   13
    14: 00000000000009b8     0 SECTION LOCAL  DEFAULT   14
    15: 00000000000009e0     0 SECTION LOCAL  DEFAULT   15
    16: 0000000000200de8     0 SECTION LOCAL  DEFAULT   16
    17: 0000000000200df0     0 SECTION LOCAL  DEFAULT   17
    18: 0000000000200df8     0 SECTION LOCAL  DEFAULT   18
    19: 0000000000200e00     0 SECTION LOCAL  DEFAULT   19
    20: 0000000000200e08     0 SECTION LOCAL  DEFAULT   20
    21: 0000000000200fd8     0 SECTION LOCAL  DEFAULT   21
    22: 0000000000201000     0 SECTION LOCAL  DEFAULT   22
    23: 0000000000201060     0 SECTION LOCAL  DEFAULT   23
    24: 0000000000201120     0 SECTION LOCAL  DEFAULT   24
    25: 0000000000000000     0 SECTION LOCAL  DEFAULT   25
    26: 0000000000000000     0 SECTION LOCAL  DEFAULT   26
    27: 0000000000000000     0 SECTION LOCAL  DEFAULT   27
    28: 0000000000000000     0 SECTION LOCAL  DEFAULT   28
    29: 0000000000000000     0 SECTION LOCAL  DEFAULT   29
    30: 0000000000000000     0 SECTION LOCAL  DEFAULT   30
    31: 0000000000000000     0 SECTION LOCAL  DEFAULT   31
    32: 0000000000000000     0 SECTION LOCAL  DEFAULT   32
    33: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    34: 0000000000200df8     0 OBJECT  LOCAL  DEFAULT   18 __JCR_LIST__
    35: 0000000000000800     0 FUNC    LOCAL  DEFAULT   11 deregister_tm_clones
    36: 0000000000000830     0 FUNC    LOCAL  DEFAULT   11 register_tm_clones
    37: 0000000000000870     0 FUNC    LOCAL  DEFAULT   11 __do_global_dtors_aux
    38: 0000000000201120     1 OBJECT  LOCAL  DEFAULT   24 completed.6355
    39: 0000000000200df0     0 OBJECT  LOCAL  DEFAULT   17 __do_global_dtors_aux_fin
    40: 00000000000008b0     0 FUNC    LOCAL  DEFAULT   11 frame_dummy
    41: 0000000000200de8     0 OBJECT  LOCAL  DEFAULT   16 __frame_dummy_init_array_
    42: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS adder.c
    43: 00000000000008f0   122 FUNC    LOCAL  DEFAULT   11 add
    44: 0000000000201060   104 OBJECT  LOCAL  DEFAULT   23 addListmodule
    45: 00000000002010e0    64 OBJECT  LOCAL  DEFAULT   23 AddListMethods
    46: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    47: 0000000000000a68     0 OBJECT  LOCAL  DEFAULT   15 __FRAME_END__
    48: 0000000000200df8     0 OBJECT  LOCAL  DEFAULT   18 __JCR_END__
    49: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS
    50: 0000000000200e00     0 OBJECT  LOCAL  DEFAULT   19 __dso_handle
    51: 0000000000200e08     0 OBJECT  LOCAL  DEFAULT   20 _DYNAMIC
    52: 00000000000009b8     0 NOTYPE  LOCAL  DEFAULT   14 __GNU_EH_FRAME_HDR
    53: 0000000000201120     0 OBJECT  LOCAL  DEFAULT   23 __TMC_END__
    54: 0000000000201000     0 OBJECT  LOCAL  DEFAULT   22 _GLOBAL_OFFSET_TABLE_
    55: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
    56: 0000000000201120     0 NOTYPE  GLOBAL DEFAULT   23 _edata
    57: 0000000000000984     0 FUNC    GLOBAL DEFAULT   12 _fini
    58: 0000000000000970    17 FUNC    GLOBAL DEFAULT   11 PyInit_addList
    59: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
    60: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND Py_BuildValue
    61: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyModule_Create2
    62: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyLong_AsLong
    63: 0000000000201128     0 NOTYPE  GLOBAL DEFAULT   24 _end
    64: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyArg_ParseTuple
    65: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyList_Size
    66: 0000000000201120     0 NOTYPE  GLOBAL DEFAULT   24 __bss_start
    67: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _Jv_RegisterClasses
    68: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
    69: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND PyList_GetItem
    70: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND __cxa_finalize@@GLIBC_2.2
    71: 0000000000000750     0 FUNC    GLOBAL DEFAULT    9 _init

Histogram for `.gnu.hash' bucket list length (total of 3 buckets):
 Length  Number     % of total  Coverage
      0  0          (  0.0%)
      1  1          ( 33.3%)     16.7%
      2  1          ( 33.3%)     50.0%
      3  1          ( 33.3%)    100.0%

Version symbols section '.gnu.version' contains 18 entries:
 地址:00000000000004fc  Offset: 0x0004fc  Link: 3 (.dynsym)
  000:   0 (*本地*)       0 (*本地*)       0 (*本地*)       0 (*本地*)
  004:   0 (*本地*)       0 (*本地*)       0 (*本地*)       0 (*本地*)
  008:   0 (*本地*)       0 (*本地*)       0 (*本地*)       2 (GLIBC_2.2.5)
  00c:   1 (*全局*)      1 (*全局*)      1 (*全局*)      1 (*全局*)
  010:   1 (*全局*)      1 (*全局*)

Version needs section '.gnu.version_r' contains 1 entries:
 地址:0x0000000000000520  Offset: 0x000520  Link: 4 (.dynstr)
  000000: 版本: 1  文件:libc.so.6  计数:1
  0x0010:名称:GLIBC_2.2.5  标志:无  版本:2

Displaying notes found at file offset 0x000001c8 with length 0x00000024:
  所有者             Data size  Description
  GNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 36151486d3559504ee1d3314183ed1afbd4154e8
[cpy@localhost extendingCpy]$

  

https://github.com/flier/pyfasthash/blob/master/setup.py

原文地址:https://www.cnblogs.com/rsapaper/p/11901027.html