精灵编辑:在其自己的部分中替换具有不同功能的部分

发布于 2025-01-21 15:08:14 字数 12325 浏览 1 评论 0原文

我有一个.o对象文件,该文件具有同一文件中其他功能的函数。该功能在自己的部分中,而不是导出。我需要用自己的实现替换此功能。我自己的实现需要外部符号。我考虑过简单地修补该部分,以便调用位于某个位置的地址(因此,旧功能实际上只是将控件传输到我的代码),然后我只需要添加某种参考/重新安置信息,以便链接器知道它需要将功能的地址放置在该位置(看起来这是所有其他“导入”的方法)。但是,如何使用Objcopy,LD,GCC和NM等工具进行操作?不幸的是,我真的无法使用任何其他工具(除了在常规Linux机器(例如SED,尴尬,DD等)上使用的工具)。我可以看到,其他导入的符号在没有地址等的情况下列出了Symtab,但我看不到它们是如何提及的。

readelf -ws is and readelf -t的输出

Symbol table '.symtab' contains 190 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 SECTION LOCAL  DEFAULT   57
     2: 00000000     0 SECTION LOCAL  DEFAULT   58
     3: 00000000     0 SECTION LOCAL  DEFAULT   59
     4: 00000000     0 SECTION LOCAL  DEFAULT   61
     5: 00000000     0 SECTION LOCAL  DEFAULT   62
     6: 00000000     0 SECTION LOCAL  DEFAULT   64
     7: 00000000     0 SECTION LOCAL  DEFAULT   66
     8: 00000000     0 SECTION LOCAL  DEFAULT   68
     9: 00000000     0 SECTION LOCAL  DEFAULT   70
    10: 00000000     0 SECTION LOCAL  DEFAULT   72
    11: 00000000     0 SECTION LOCAL  DEFAULT   74
    12: 00000000     0 SECTION LOCAL  DEFAULT   76
    13: 00000000     0 SECTION LOCAL  DEFAULT   78
    14: 00000000     0 SECTION LOCAL  DEFAULT   80
    15: 00000000     0 SECTION LOCAL  DEFAULT   82
    16: 00000000     0 SECTION LOCAL  DEFAULT   84
    17: 00000000     0 SECTION LOCAL  DEFAULT   86
    18: 00000000     0 SECTION LOCAL  DEFAULT   88
    19: 00000000     0 SECTION LOCAL  DEFAULT   90
    20: 00000000     0 SECTION LOCAL  DEFAULT   92
    21: 00000000     0 SECTION LOCAL  DEFAULT   94
    22: 00000000     0 SECTION LOCAL  DEFAULT   96
    23: 00000000     0 SECTION LOCAL  DEFAULT   98
    24: 00000000     0 SECTION LOCAL  DEFAULT  100
    25: 00000000     0 SECTION LOCAL  DEFAULT  102
    26: 00000000     0 SECTION LOCAL  DEFAULT  104
    27: 00000000     0 SECTION LOCAL  DEFAULT  105
    28: 00000000     0 SECTION LOCAL  DEFAULT  107
    29: 00000000     0 SECTION LOCAL  DEFAULT  109
    30: 00000000     0 SECTION LOCAL  DEFAULT  111
    31: 00000000     0 SECTION LOCAL  DEFAULT  113
    32: 00000000     0 SECTION LOCAL  DEFAULT  115
    33: 00000000     0 SECTION LOCAL  DEFAULT  117
    34: 00000000     0 SECTION LOCAL  DEFAULT  119
    35: 00000000     0 SECTION LOCAL  DEFAULT  121
    36: 00000000     0 SECTION LOCAL  DEFAULT  123
    37: 00000000     0 SECTION LOCAL  DEFAULT  125
    38: 00000000     0 SECTION LOCAL  DEFAULT  126
    39: 00000000     0 SECTION LOCAL  DEFAULT  128
    40: 00000000     0 SECTION LOCAL  DEFAULT  130
    41: 00000000     0 SECTION LOCAL  DEFAULT  132
    42: 00000000     0 SECTION LOCAL  DEFAULT  134
    43: 00000000     0 SECTION LOCAL  DEFAULT  136
    44: 00000000     0 SECTION LOCAL  DEFAULT  138
    45: 00000000     0 SECTION LOCAL  DEFAULT  140
    46: 00000000     0 SECTION LOCAL  DEFAULT  142
    47: 00000000     0 SECTION LOCAL  DEFAULT  144
    48: 00000000     0 SECTION LOCAL  DEFAULT  146
    49: 00000000     0 SECTION LOCAL  DEFAULT  148
    50: 00000000     0 SECTION LOCAL  DEFAULT  150
    51: 00000000     0 SECTION LOCAL  DEFAULT  152
    52: 00000000     0 SECTION LOCAL  DEFAULT  154
    53: 00000000     0 SECTION LOCAL  DEFAULT  156
    54: 00000000     0 SECTION LOCAL  DEFAULT  158
    55: 00000000     0 SECTION LOCAL  DEFAULT  160
    56: 00000000     0 SECTION LOCAL  DEFAULT  162
    57: 00000000     0 SECTION LOCAL  DEFAULT  164
    58: 00000000     0 SECTION LOCAL  DEFAULT  166
    59: 00000000     0 SECTION LOCAL  DEFAULT  168
    60: 00000000     0 SECTION LOCAL  DEFAULT    1
    61: 00000000     0 SECTION LOCAL  DEFAULT    2
    62: 00000000     0 SECTION LOCAL  DEFAULT    3
    63: 00000000     0 SECTION LOCAL  DEFAULT    4
    64: 00000000     0 SECTION LOCAL  DEFAULT    5
    65: 00000000     0 SECTION LOCAL  DEFAULT    6
    66: 00000000     0 SECTION LOCAL  DEFAULT    7
    67: 00000000     0 SECTION LOCAL  DEFAULT    8
    68: 00000000     0 SECTION LOCAL  DEFAULT    9
    69: 00000000     0 SECTION LOCAL  DEFAULT   10
    70: 00000000     0 SECTION LOCAL  DEFAULT   11
    71: 00000000     0 SECTION LOCAL  DEFAULT   12
    72: 00000000     0 SECTION LOCAL  DEFAULT   13
    73: 00000000     0 SECTION LOCAL  DEFAULT   14
    74: 00000000     0 SECTION LOCAL  DEFAULT   15
    75: 00000000     0 SECTION LOCAL  DEFAULT   16
    76: 00000000     0 SECTION LOCAL  DEFAULT   17
    77: 00000000     0 SECTION LOCAL  DEFAULT   18
    78: 00000000     0 SECTION LOCAL  DEFAULT   19
    79: 00000000     0 SECTION LOCAL  DEFAULT   20
    80: 00000000     0 SECTION LOCAL  DEFAULT   21
    81: 00000000     0 SECTION LOCAL  DEFAULT   22
    82: 00000000     0 SECTION LOCAL  DEFAULT   23
    83: 00000000     0 SECTION LOCAL  DEFAULT   24
    84: 00000000     0 SECTION LOCAL  DEFAULT   25
    85: 00000000     0 SECTION LOCAL  DEFAULT   26
    86: 00000000     0 SECTION LOCAL  DEFAULT   27
    87: 00000000     0 SECTION LOCAL  DEFAULT   28
    88: 00000000     0 SECTION LOCAL  DEFAULT   29
    89: 00000000     0 SECTION LOCAL  DEFAULT   30
    90: 00000000     0 SECTION LOCAL  DEFAULT   31
    91: 00000000     0 SECTION LOCAL  DEFAULT   32
    92: 00000000     0 SECTION LOCAL  DEFAULT   33
    93: 00000000     0 SECTION LOCAL  DEFAULT   34
    94: 00000000     0 SECTION LOCAL  DEFAULT   35
    95: 00000000     0 SECTION LOCAL  DEFAULT   36
    96: 00000000     0 SECTION LOCAL  DEFAULT   37
    97: 00000000     0 SECTION LOCAL  DEFAULT   38
    98: 00000000     0 SECTION LOCAL  DEFAULT   39
    99: 00000000     0 SECTION LOCAL  DEFAULT   40
   100: 00000000     0 SECTION LOCAL  DEFAULT   41
   101: 00000000     0 SECTION LOCAL  DEFAULT   42
   102: 00000000     0 SECTION LOCAL  DEFAULT   43
   103: 00000000     0 SECTION LOCAL  DEFAULT   44
   104: 00000000     0 SECTION LOCAL  DEFAULT   45
   105: 00000000     0 SECTION LOCAL  DEFAULT   46
   106: 00000000     0 SECTION LOCAL  DEFAULT   47
   107: 00000000     0 SECTION LOCAL  DEFAULT   48
   108: 00000000     0 SECTION LOCAL  DEFAULT   49
   109: 00000000     0 SECTION LOCAL  DEFAULT   50
   110: 00000000     0 SECTION LOCAL  DEFAULT   51
   111: 00000000     0 SECTION LOCAL  DEFAULT   52
   112: 00000000     0 SECTION LOCAL  DEFAULT   53
   113: 00000000     0 SECTION LOCAL  DEFAULT   54
   114: 00000000     0 SECTION LOCAL  DEFAULT   55
   115: 00000000     0 SECTION LOCAL  DEFAULT   56
   116: 00000000     0 SECTION LOCAL  DEFAULT  170
   117: 00000000     0 SECTION LOCAL  DEFAULT  171
   118: 00000000     0 SECTION LOCAL  DEFAULT  172
   119: 00000000     0 SECTION LOCAL  DEFAULT  174
   120: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpabuf_put
   121: 00000004    30 FUNC    GLOBAL DEFAULT   64 eap_peer_get_eap_method
   122: 00000004    29 FUNC    GLOBAL DEFAULT   66 eap_peer_get_methods
   123: 00000008    65 FUNC    GLOBAL DEFAULT   68 eap_peer_get_type
   124: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_strcmp
   125: 00000008    52 FUNC    GLOBAL DEFAULT   72 eap_get_phase2_type
   126: 00000010   136 FUNC    GLOBAL DEFAULT   74 eap_get_phase2_types
   127: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND pvPortMalloc
   128: 00000008    51 FUNC    GLOBAL DEFAULT   76 eap_peer_method_alloc
   129: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND pvPortZalloc
   130: 00000008    24 FUNC    GLOBAL DEFAULT   78 eap_peer_method_free
   131: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND vPortFree
   132: 0000000c    99 FUNC    GLOBAL DEFAULT   80 eap_peer_method_register
   133: 00000008    48 FUNC    GLOBAL DEFAULT   82 eap_peer_unregister_methods
   134: 00000010    42 FUNC    GLOBAL DEFAULT   84 eap_peer_register_methods
   135: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_tls_register
   136: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_mschapv2_register
   137: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_peap_register
   138: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_ttls_register
   139: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND g_ic
   140: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ieee80211_output_pbuf
   141: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_memset
   142: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_memcpy
   143: 00000008    59 FUNC    GLOBAL DEFAULT   92 wpa2_sm_alloc_eapol
   144: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND pbuf_alloc
   145: 00000020   145 FUNC    GLOBAL DEFAULT   96 eap_sm_build_identity_resp
   146: 00000000     5 FUNC    GLOBAL DEFAULT  125 eap_get_config
   147: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND os_printf_plus
   148: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_msg_alloc
   149: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_update_len
   150: 00000010    79 FUNC    GLOBAL DEFAULT  100 eap_sm_send_eapol
   151: 00000034   454 FUNC    GLOBAL DEFAULT  102 eap_sm_process_request
   152: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpabuf_free
   153: 0000001c   188 FUNC    GLOBAL DEFAULT  105 wpa2_sm_rx_eapol
   154: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpabuf_alloc_copy
   155: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpa_set_pmk
   156: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_bzero
   157: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_strncpy
   158: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wifi_get_macaddr
   159: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND tls_init
   160: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND tls_deinit
   161: 00000004    37 FUNC    GLOBAL DEFAULT  126 eap_get_config_identity
   162: 00000004    37 FUNC    GLOBAL DEFAULT  128 eap_get_config_password
   163: 00000004    51 FUNC    GLOBAL DEFAULT  130 eap_get_config_password2
   164: 00000004    39 FUNC    GLOBAL DEFAULT  132 eap_get_config_new_password
   165: 00000004    63 FUNC    GLOBAL DEFAULT  134 eap_get_config_blob
   166: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_strncmp
   167: 00000048   164 FUNC    GLOBAL DEFAULT  136 wifi_station_set_wpa2_enterprise_auth
   168: 00000004    36 FUNC    GLOBAL DEFAULT  138 wifi_station_set_enterprise_cert_key
   169: 00000004    21 FUNC    GLOBAL DEFAULT  140 wifi_station_clear_enterprise_cert_key
   170: 00000004    16 FUNC    GLOBAL DEFAULT  142 wifi_station_set_enterprise_ca_cert
   171: 00000004    11 FUNC    GLOBAL DEFAULT  144 wifi_station_clear_enterprise_ca_cert
   172: 00000024   109 FUNC    GLOBAL DEFAULT  146 wifi_station_set_enterprise_identity
   173: 00000010    40 FUNC    GLOBAL DEFAULT  148 wifi_station_clear_enterprise_identity
   174: 00000024   109 FUNC    GLOBAL DEFAULT  150 wifi_station_set_enterprise_username
   175: 00000010    40 FUNC    GLOBAL DEFAULT  152 wifi_station_clear_enterprise_username
   176: 00000024   103 FUNC    GLOBAL DEFAULT  154 wifi_station_set_enterprise_password
   177: 00000010    40 FUNC    GLOBAL DEFAULT  156 wifi_station_clear_enterprise_password
   178: 00000024   103 FUNC    GLOBAL DEFAULT  158 wifi_station_set_enterprise_new_password
   179: 00000010    40 FUNC    GLOBAL DEFAULT  160 wifi_station_clear_enterprise_new_password
   180: 00000004     8 FUNC    GLOBAL DEFAULT  162 wifi_station_set_enterprise_disable_time_check
   181: 00000004     8 FUNC    GLOBAL DEFAULT  164 wifi_station_get_enterprise_disable_time_check
   182: 00000004     8 FUNC    GLOBAL DEFAULT  166 wpa2_enterprise_set_user_get_time
   183: 00000004    28 FUNC    GLOBAL DEFAULT  168 wpa2_get_time
   184: 00000004    36 FUNC    GLOBAL DEFAULT  138 wifi_station_set_cert_key
   185: 00000004    21 FUNC    GLOBAL DEFAULT  140 wifi_station_clear_cert_key
   186: 00000024   109 FUNC    GLOBAL DEFAULT  146 wifi_station_set_identity
   187: 00000010    40 FUNC    GLOBAL DEFAULT  148 wifi_station_clear_identity
   188: 00000024   109 FUNC    GLOBAL DEFAULT  150 wifi_station_set_username
   189: 00000010    40 FUNC    GLOBAL DEFAULT  152 wifi_station_clear_username

说明了我需要修改的部分/函数:

有179个截面标题,从Offset 0x96b0

Section Headers:
  [Nr] Name
       Type            Addr     Off    Size   ES   Lk Inf Al
       Flags
...
  [113] .text.eap_peer_config_deinit
       PROGBITS        00000000 000dd0 000868 00   0   0  4
       [00000006]: ALLOC, EXEC
  [114] .rela.text.eap_peer_config_deinit
       RELA            00000000 005d68 000000 0c  176 113  4
       [00000040]: INFO LINK

开始当我达到字符限制时,要切断输出。

I have a .o object file which has a function that other functions in that same file are calling. That function is in it's own section and not exported. I need to replace this function with my own implementation. My own implementation needs external symbols aswell. I thought about simply patching that section so it calls an address that's placed at some location (so the old function is effectively just transfering control to my code), then I only need to add some kind of reference/relocation information so the linker knows that it needs to place the address of the function at that location (it looks like that's how it's done for all the other "imports"). But how do I do this using tools like objcopy, ld, gcc, and nm? Unfortunately I can't really use any additional tools (except for those present on a normal linux machine like sed, awk, dd and so on). I can see that the other imported symbols are listed in the symtab without an address and so on, but I can't see how they are referred to.

The output of readelf -Ws is

Symbol table '.symtab' contains 190 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 SECTION LOCAL  DEFAULT   57
     2: 00000000     0 SECTION LOCAL  DEFAULT   58
     3: 00000000     0 SECTION LOCAL  DEFAULT   59
     4: 00000000     0 SECTION LOCAL  DEFAULT   61
     5: 00000000     0 SECTION LOCAL  DEFAULT   62
     6: 00000000     0 SECTION LOCAL  DEFAULT   64
     7: 00000000     0 SECTION LOCAL  DEFAULT   66
     8: 00000000     0 SECTION LOCAL  DEFAULT   68
     9: 00000000     0 SECTION LOCAL  DEFAULT   70
    10: 00000000     0 SECTION LOCAL  DEFAULT   72
    11: 00000000     0 SECTION LOCAL  DEFAULT   74
    12: 00000000     0 SECTION LOCAL  DEFAULT   76
    13: 00000000     0 SECTION LOCAL  DEFAULT   78
    14: 00000000     0 SECTION LOCAL  DEFAULT   80
    15: 00000000     0 SECTION LOCAL  DEFAULT   82
    16: 00000000     0 SECTION LOCAL  DEFAULT   84
    17: 00000000     0 SECTION LOCAL  DEFAULT   86
    18: 00000000     0 SECTION LOCAL  DEFAULT   88
    19: 00000000     0 SECTION LOCAL  DEFAULT   90
    20: 00000000     0 SECTION LOCAL  DEFAULT   92
    21: 00000000     0 SECTION LOCAL  DEFAULT   94
    22: 00000000     0 SECTION LOCAL  DEFAULT   96
    23: 00000000     0 SECTION LOCAL  DEFAULT   98
    24: 00000000     0 SECTION LOCAL  DEFAULT  100
    25: 00000000     0 SECTION LOCAL  DEFAULT  102
    26: 00000000     0 SECTION LOCAL  DEFAULT  104
    27: 00000000     0 SECTION LOCAL  DEFAULT  105
    28: 00000000     0 SECTION LOCAL  DEFAULT  107
    29: 00000000     0 SECTION LOCAL  DEFAULT  109
    30: 00000000     0 SECTION LOCAL  DEFAULT  111
    31: 00000000     0 SECTION LOCAL  DEFAULT  113
    32: 00000000     0 SECTION LOCAL  DEFAULT  115
    33: 00000000     0 SECTION LOCAL  DEFAULT  117
    34: 00000000     0 SECTION LOCAL  DEFAULT  119
    35: 00000000     0 SECTION LOCAL  DEFAULT  121
    36: 00000000     0 SECTION LOCAL  DEFAULT  123
    37: 00000000     0 SECTION LOCAL  DEFAULT  125
    38: 00000000     0 SECTION LOCAL  DEFAULT  126
    39: 00000000     0 SECTION LOCAL  DEFAULT  128
    40: 00000000     0 SECTION LOCAL  DEFAULT  130
    41: 00000000     0 SECTION LOCAL  DEFAULT  132
    42: 00000000     0 SECTION LOCAL  DEFAULT  134
    43: 00000000     0 SECTION LOCAL  DEFAULT  136
    44: 00000000     0 SECTION LOCAL  DEFAULT  138
    45: 00000000     0 SECTION LOCAL  DEFAULT  140
    46: 00000000     0 SECTION LOCAL  DEFAULT  142
    47: 00000000     0 SECTION LOCAL  DEFAULT  144
    48: 00000000     0 SECTION LOCAL  DEFAULT  146
    49: 00000000     0 SECTION LOCAL  DEFAULT  148
    50: 00000000     0 SECTION LOCAL  DEFAULT  150
    51: 00000000     0 SECTION LOCAL  DEFAULT  152
    52: 00000000     0 SECTION LOCAL  DEFAULT  154
    53: 00000000     0 SECTION LOCAL  DEFAULT  156
    54: 00000000     0 SECTION LOCAL  DEFAULT  158
    55: 00000000     0 SECTION LOCAL  DEFAULT  160
    56: 00000000     0 SECTION LOCAL  DEFAULT  162
    57: 00000000     0 SECTION LOCAL  DEFAULT  164
    58: 00000000     0 SECTION LOCAL  DEFAULT  166
    59: 00000000     0 SECTION LOCAL  DEFAULT  168
    60: 00000000     0 SECTION LOCAL  DEFAULT    1
    61: 00000000     0 SECTION LOCAL  DEFAULT    2
    62: 00000000     0 SECTION LOCAL  DEFAULT    3
    63: 00000000     0 SECTION LOCAL  DEFAULT    4
    64: 00000000     0 SECTION LOCAL  DEFAULT    5
    65: 00000000     0 SECTION LOCAL  DEFAULT    6
    66: 00000000     0 SECTION LOCAL  DEFAULT    7
    67: 00000000     0 SECTION LOCAL  DEFAULT    8
    68: 00000000     0 SECTION LOCAL  DEFAULT    9
    69: 00000000     0 SECTION LOCAL  DEFAULT   10
    70: 00000000     0 SECTION LOCAL  DEFAULT   11
    71: 00000000     0 SECTION LOCAL  DEFAULT   12
    72: 00000000     0 SECTION LOCAL  DEFAULT   13
    73: 00000000     0 SECTION LOCAL  DEFAULT   14
    74: 00000000     0 SECTION LOCAL  DEFAULT   15
    75: 00000000     0 SECTION LOCAL  DEFAULT   16
    76: 00000000     0 SECTION LOCAL  DEFAULT   17
    77: 00000000     0 SECTION LOCAL  DEFAULT   18
    78: 00000000     0 SECTION LOCAL  DEFAULT   19
    79: 00000000     0 SECTION LOCAL  DEFAULT   20
    80: 00000000     0 SECTION LOCAL  DEFAULT   21
    81: 00000000     0 SECTION LOCAL  DEFAULT   22
    82: 00000000     0 SECTION LOCAL  DEFAULT   23
    83: 00000000     0 SECTION LOCAL  DEFAULT   24
    84: 00000000     0 SECTION LOCAL  DEFAULT   25
    85: 00000000     0 SECTION LOCAL  DEFAULT   26
    86: 00000000     0 SECTION LOCAL  DEFAULT   27
    87: 00000000     0 SECTION LOCAL  DEFAULT   28
    88: 00000000     0 SECTION LOCAL  DEFAULT   29
    89: 00000000     0 SECTION LOCAL  DEFAULT   30
    90: 00000000     0 SECTION LOCAL  DEFAULT   31
    91: 00000000     0 SECTION LOCAL  DEFAULT   32
    92: 00000000     0 SECTION LOCAL  DEFAULT   33
    93: 00000000     0 SECTION LOCAL  DEFAULT   34
    94: 00000000     0 SECTION LOCAL  DEFAULT   35
    95: 00000000     0 SECTION LOCAL  DEFAULT   36
    96: 00000000     0 SECTION LOCAL  DEFAULT   37
    97: 00000000     0 SECTION LOCAL  DEFAULT   38
    98: 00000000     0 SECTION LOCAL  DEFAULT   39
    99: 00000000     0 SECTION LOCAL  DEFAULT   40
   100: 00000000     0 SECTION LOCAL  DEFAULT   41
   101: 00000000     0 SECTION LOCAL  DEFAULT   42
   102: 00000000     0 SECTION LOCAL  DEFAULT   43
   103: 00000000     0 SECTION LOCAL  DEFAULT   44
   104: 00000000     0 SECTION LOCAL  DEFAULT   45
   105: 00000000     0 SECTION LOCAL  DEFAULT   46
   106: 00000000     0 SECTION LOCAL  DEFAULT   47
   107: 00000000     0 SECTION LOCAL  DEFAULT   48
   108: 00000000     0 SECTION LOCAL  DEFAULT   49
   109: 00000000     0 SECTION LOCAL  DEFAULT   50
   110: 00000000     0 SECTION LOCAL  DEFAULT   51
   111: 00000000     0 SECTION LOCAL  DEFAULT   52
   112: 00000000     0 SECTION LOCAL  DEFAULT   53
   113: 00000000     0 SECTION LOCAL  DEFAULT   54
   114: 00000000     0 SECTION LOCAL  DEFAULT   55
   115: 00000000     0 SECTION LOCAL  DEFAULT   56
   116: 00000000     0 SECTION LOCAL  DEFAULT  170
   117: 00000000     0 SECTION LOCAL  DEFAULT  171
   118: 00000000     0 SECTION LOCAL  DEFAULT  172
   119: 00000000     0 SECTION LOCAL  DEFAULT  174
   120: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpabuf_put
   121: 00000004    30 FUNC    GLOBAL DEFAULT   64 eap_peer_get_eap_method
   122: 00000004    29 FUNC    GLOBAL DEFAULT   66 eap_peer_get_methods
   123: 00000008    65 FUNC    GLOBAL DEFAULT   68 eap_peer_get_type
   124: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_strcmp
   125: 00000008    52 FUNC    GLOBAL DEFAULT   72 eap_get_phase2_type
   126: 00000010   136 FUNC    GLOBAL DEFAULT   74 eap_get_phase2_types
   127: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND pvPortMalloc
   128: 00000008    51 FUNC    GLOBAL DEFAULT   76 eap_peer_method_alloc
   129: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND pvPortZalloc
   130: 00000008    24 FUNC    GLOBAL DEFAULT   78 eap_peer_method_free
   131: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND vPortFree
   132: 0000000c    99 FUNC    GLOBAL DEFAULT   80 eap_peer_method_register
   133: 00000008    48 FUNC    GLOBAL DEFAULT   82 eap_peer_unregister_methods
   134: 00000010    42 FUNC    GLOBAL DEFAULT   84 eap_peer_register_methods
   135: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_tls_register
   136: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_mschapv2_register
   137: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_peap_register
   138: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_peer_ttls_register
   139: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND g_ic
   140: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ieee80211_output_pbuf
   141: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_memset
   142: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_memcpy
   143: 00000008    59 FUNC    GLOBAL DEFAULT   92 wpa2_sm_alloc_eapol
   144: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND pbuf_alloc
   145: 00000020   145 FUNC    GLOBAL DEFAULT   96 eap_sm_build_identity_resp
   146: 00000000     5 FUNC    GLOBAL DEFAULT  125 eap_get_config
   147: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND os_printf_plus
   148: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_msg_alloc
   149: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND eap_update_len
   150: 00000010    79 FUNC    GLOBAL DEFAULT  100 eap_sm_send_eapol
   151: 00000034   454 FUNC    GLOBAL DEFAULT  102 eap_sm_process_request
   152: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpabuf_free
   153: 0000001c   188 FUNC    GLOBAL DEFAULT  105 wpa2_sm_rx_eapol
   154: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpabuf_alloc_copy
   155: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wpa_set_pmk
   156: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_bzero
   157: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_strncpy
   158: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND wifi_get_macaddr
   159: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND tls_init
   160: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND tls_deinit
   161: 00000004    37 FUNC    GLOBAL DEFAULT  126 eap_get_config_identity
   162: 00000004    37 FUNC    GLOBAL DEFAULT  128 eap_get_config_password
   163: 00000004    51 FUNC    GLOBAL DEFAULT  130 eap_get_config_password2
   164: 00000004    39 FUNC    GLOBAL DEFAULT  132 eap_get_config_new_password
   165: 00000004    63 FUNC    GLOBAL DEFAULT  134 eap_get_config_blob
   166: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND ets_strncmp
   167: 00000048   164 FUNC    GLOBAL DEFAULT  136 wifi_station_set_wpa2_enterprise_auth
   168: 00000004    36 FUNC    GLOBAL DEFAULT  138 wifi_station_set_enterprise_cert_key
   169: 00000004    21 FUNC    GLOBAL DEFAULT  140 wifi_station_clear_enterprise_cert_key
   170: 00000004    16 FUNC    GLOBAL DEFAULT  142 wifi_station_set_enterprise_ca_cert
   171: 00000004    11 FUNC    GLOBAL DEFAULT  144 wifi_station_clear_enterprise_ca_cert
   172: 00000024   109 FUNC    GLOBAL DEFAULT  146 wifi_station_set_enterprise_identity
   173: 00000010    40 FUNC    GLOBAL DEFAULT  148 wifi_station_clear_enterprise_identity
   174: 00000024   109 FUNC    GLOBAL DEFAULT  150 wifi_station_set_enterprise_username
   175: 00000010    40 FUNC    GLOBAL DEFAULT  152 wifi_station_clear_enterprise_username
   176: 00000024   103 FUNC    GLOBAL DEFAULT  154 wifi_station_set_enterprise_password
   177: 00000010    40 FUNC    GLOBAL DEFAULT  156 wifi_station_clear_enterprise_password
   178: 00000024   103 FUNC    GLOBAL DEFAULT  158 wifi_station_set_enterprise_new_password
   179: 00000010    40 FUNC    GLOBAL DEFAULT  160 wifi_station_clear_enterprise_new_password
   180: 00000004     8 FUNC    GLOBAL DEFAULT  162 wifi_station_set_enterprise_disable_time_check
   181: 00000004     8 FUNC    GLOBAL DEFAULT  164 wifi_station_get_enterprise_disable_time_check
   182: 00000004     8 FUNC    GLOBAL DEFAULT  166 wpa2_enterprise_set_user_get_time
   183: 00000004    28 FUNC    GLOBAL DEFAULT  168 wpa2_get_time
   184: 00000004    36 FUNC    GLOBAL DEFAULT  138 wifi_station_set_cert_key
   185: 00000004    21 FUNC    GLOBAL DEFAULT  140 wifi_station_clear_cert_key
   186: 00000024   109 FUNC    GLOBAL DEFAULT  146 wifi_station_set_identity
   187: 00000010    40 FUNC    GLOBAL DEFAULT  148 wifi_station_clear_identity
   188: 00000024   109 FUNC    GLOBAL DEFAULT  150 wifi_station_set_username
   189: 00000010    40 FUNC    GLOBAL DEFAULT  152 wifi_station_clear_username

and readelf -t says this about the section/function I need to modify:

There are 179 section headers, starting at offset 0x96b0:

Section Headers:
  [Nr] Name
       Type            Addr     Off    Size   ES   Lk Inf Al
       Flags
...
  [113] .text.eap_peer_config_deinit
       PROGBITS        00000000 000dd0 000868 00   0   0  4
       [00000006]: ALLOC, EXEC
  [114] .rela.text.eap_peer_config_deinit
       RELA            00000000 005d68 000000 0c  176 113  4
       [00000040]: INFO LINK

I had to cut the output as I reached the character limit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

噩梦成真你也成魔 2025-01-28 15:08:14

i有一个.o对象文件,该文件具有同一文件中其他功能的函数。该功能在自己的部分中,而不是导出。

我要修改的函数基本上是在结构的第一个成员上呼叫免费,然后将该结构归零。我还需要在结构的其他成员中免费拨打,然后再归零。

最简单的解决方案是用.o使用objcopy-remove section ...-删除 - 重组...,然后添加您自己的函数,在单独的.o中实现。

这要比编辑现有.o“剪接”不同的实现要简单得多,并且似乎满足了您的要求。

I have a .o object file which has a function that other functions in that same file are calling. That function is in it's own section and not exported.

The function I want to modify is basically calling free on the first member of a struct and then zeroing out that struct. I need to call free on the other members of the struct as well before it's all zeroed out.

The simplest solution is to remove the function from the .o file with objcopy --remove-section ... --remove-relocations ..., and add your own implementation in a separate .o.

That's much simpler than editing existing .o to "splice in" different implementation, and appears to satisfy your requirements.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文