zoukankan      html  css  js  c++  java
  • 扩展和嵌入 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

  • 相关阅读:
    UNIX时间戳/日期转换
    慎用date获取未来时间
    lnmp集成开发环境安装pdo_dblib扩展
    elementary OS下netbeans中文乱码的问题
    一个轻量级javascript框架的设计模式
    debian清空消息通知
    一道数组方面的笔试题
    模拟post提交
    P2970 [USACO09DEC]自私的放牧Selfish Grazing
    P1063 能量项链
  • 原文地址:https://www.cnblogs.com/rsapaper/p/11901027.html
Copyright © 2011-2022 走看看