Android NDK隐藏jni动态库的内部符号表
2016-02-23 11:02
1066 查看
本文转自:http://blog.csdn.net/dj0379/article/details/17010981
写过win32程序的朋友对dll导出函数名都很熟悉,大家都可以通过.def文件或者__declspec(dllexport)来指定导出的函数名。在android下,可执行文件或者动态链接库用的是elf格式,和win32的pe格式有所不同。当编译动态链接库时,缺省的编译选项下默认所有的符号表都会导出。以android-ndk下的san-angeles例子为例,用ndk编译之后生成的jni动态库导出的符号表可以用下面命令看到(默认开发环境为win32
cygwin):
showsource
这里可以看到几乎所有的函数名全局变量名都会被导出。其中有Java_com_example_SanAngeles_为前缀的JNI接口函数,有importGLInit这些普通函数,有freeGLObject这些局部(static)函数,还有sStartTick等全局变量名。其实在这个动态发布的时候,只需要导出java_com_开头的jni函数就可以了,里面这些细节函数名完全不需要暴露出来。
如何做到这一点呢?首先,我们需要了解gcc新引进的选项-fvisibility=hidden,这个编译选项可以把所有的符号名(包括函数名和全局变量名)都强制标记成隐藏属性。我们可以在Android.mk中可以通过修改LOCAL_CFLAGS选项加入-fvisibility=hidden来做到这一点,这样编译之后的.so看到的符号表为:
showsource
这里可以看到所有源代码里出现的函数名和全局变量名(符号名)都变成了't',也就是说都是局部符号(类似于static),这样这些函数名主程序是看不到的。我们还需要把jni的入口函数变成'T'类型才行,我们可以修改jni入口函数的属性来导出这些入口函数,比如app-android.c中的Java_com_example_SanAngeles_DemoRenderer_nativeInit函数,可以改为:
showsource
其他几个Java_com_example_SanAngeles_开头的函数也这样修改一下即可。这样编译之后我们看到的符号表里所有Java_com_example_SanAngeles_开头的函数又变成'T'类型了。
最后我们还有一个问题就是如何隐藏那些局部符号名呢(t类型的符号)?我们可以调用strip-x来去掉这些局部的符号名。我们可以通过修改Android.mk重定义cmd-strip这个命令来实现,修改后的Android.mk如下:
showsource
这样每次编译之后会自动strip掉这些局部的符号名,如下:
showsource
这样局部符号都没有了,只有jni入口函数被导出。这样提高了jni动态库的安全性,同时.so文件的大小也小了不少。
关于elf文件的更多资料,可以参考这篇文章。
如果要了解gcc和strip更多的选项,请移步gcc和binutils的官方文档。
补充隐藏和显示方式:
#defineDLL_LOCAL__attribute__((visibility("hidden")))
#defineDLL_CLASS__attribute__((visibility("default")))
LOCAL_CFLAGS+=-fvisibility=hidden#默认隐藏符号
写过win32程序的朋友对dll导出函数名都很熟悉,大家都可以通过.def文件或者__declspec(dllexport)来指定导出的函数名。在android下,可执行文件或者动态链接库用的是elf格式,和win32的pe格式有所不同。当编译动态链接库时,缺省的编译选项下默认所有的符号表都会导出。以android-ndk下的san-angeles例子为例,用ndk编译之后生成的jni动态库导出的符号表可以用下面命令看到(默认开发环境为win32
cygwin):
001
$/path/to/ndk/buid/prebuilt/windows/arm-eabi-4.4.0/bin/arm-eabi-nm libs/armeabi/libsanangeles.so
002
003
00003600TJava_com_example_SanAngeles_DemoGLSurfaceView_nativePause
004
005
00003638TJava_com_example_SanAngeles_DemoRenderer_nativeDone
006
007
0000367cTJava_com_example_SanAngeles_DemoRenderer_nativeInit
008
009
000035b4TJava_com_example_SanAngeles_DemoRenderer_nativeRender
010
011
00003644TJava_com_example_SanAngeles_DemoRenderer_nativeResize
012
013
00007334a_DYNAMIC
014
015
0000740ca_GLOBAL_OFFSET_TABLE_
016
017
0000577cT_Unwind_Backtrace
018
019
00004978T_Unwind_Complete
020
021
0000497cT_Unwind_DeleteException
022
023
00005758T_Unwind_ForcedUnwind
024
025
00004970T_Unwind_GetCFA
026
027
00005800T_Unwind_GetDataRelBase
028
029
00005808t_Unwind_GetGR
030
031
0000482ct_Unwind_GetGR
032
033
00005838T_Unwind_GetLanguageSpecificData
034
035
00005854T_Unwind_GetRegionStart
036
037
000057f8T_Unwind_GetTextRelBase
038
039
000056ecT_Unwind_RaiseException
040
041
00005710T_Unwind_Resume
042
043
00005734T_Unwind_Resume_or_Rethrow
044
045
000048a0t_Unwind_SetGR
046
047
000047e0T_Unwind_VRS_Get
048
049
0000528cT_Unwind_VRS_Pop
050
051
00004854T_Unwind_VRS_Set
052
053
000047cct_Unwind_decode_target2
054
055
0000577cT___Unwind_Backtrace
056
057
00005758T___Unwind_ForcedUnwind
058
059
000056ecT___Unwind_RaiseException
060
061
00005710T___Unwind_Resume
062
063
00005734T___Unwind_Resume_or_Rethrow
064
065
00003874T__adddf3
066
067
0000413cT__addsf3
068
069
000046f8T__aeabi_cfcmpeq
070
071
000046f8T__aeabi_cfcmple
072
073
000046e8T__aeabi_cfrcmple
074
075
00004090T__aeabi_d2f
076
077
00003874T__aeabi_dadd
078
079
00003e8cT__aeabi_ddiv
080
081
00003c20T__aeabi_dmul
082
083
00003868T__aeabi_drsub
084
085
00003870T__aeabi_dsub
086
087
00003b6cT__aeabi_f2d
088
089
00004770T__aeabi_f2iz
090
091
0000413cT__aeabi_fadd
092
093
0000470cT__aeabi_fcmpeq
094
095
00004748T__aeabi_fcmpge
096
097
0000475cT__aeabi_fcmpgt
098
099
00004734T__aeabi_fcmple
100
101
00004720T__aeabi_fcmplt
102
103
00004518T__aeabi_fdiv
104
105
00004380T__aeabi_fmul
106
107
00004130T__aeabi_frsub
108
109
00004138T__aeabi_fsub
110
111
00003b44T__aeabi_i2d
112
113
000042d4T__aeabi_i2f
114
115
00003770T__aeabi_idiv
116
117
00003864T__aeabi_idiv0
118
119
0000384cT__aeabi_idivmod
120
121
00003bc0T__aeabi_l2d
122
123
00004304T__aeabi_l2f
124
125
00003864T__aeabi_ldiv0
126
127
00003b20T__aeabi_ui2d
128
129
000042ccT__aeabi_ui2f
130
131
000036acT__aeabi_uidiv
132
133
00003758T__aeabi_uidivmod
134
135
00003bacT__aeabi_ul2d
136
137
000042f4T__aeabi_ul2f
138
139
00004d5cT__aeabi_unwind_cpp_pr0
140
141
00004d54W__aeabi_unwind_cpp_pr1
142
143
00004d4cW__aeabi_unwind_cpp_pr2
144
145
U__android_log_print
146
147
000076d4A__bss_end__
148
149
00007658A__bss_start
150
151
00007658A__bss_start__
152
153
00004688T__cmpsf2
154
155
w__cxa_begin_cleanup
156
157
w__cxa_call_unexpected
158
159
w__cxa_type_match
160
161
000074b8D__data_start
162
163
00003864T__div0
164
165
00003e8cT__divdf3
166
167
00004518T__divsf3
168
169
00003770T__divsi3
170
171
000076d4A__end__
172
173
00004688T__eqsf2
174
175
00006334A__exidx_end
176
177
000061a4A__exidx_start
178
179
00003b6cT__extendsfdf2
180
181
00004770T__fixsfsi
182
183
00003bc0T__floatdidf
184
185
00004304T__floatdisf
186
187
00003b44T__floatsidf
188
189
000042d4T__floatsisf
190
191
00003bacT__floatundidf
192
193
000042f4T__floatundisf
194
195
00003b20T__floatunsidf
196
197
000042ccT__floatunsisf
198
199
00004678T__gesf2
200
201
00004f04T__gnu_Unwind_Backtrace
202
203
w__gnu_Unwind_Find_exidx
204
205
000050e8T__gnu_Unwind_ForcedUnwind
206
207
0000515cT__gnu_Unwind_RaiseException
208
209
0000560cT__gnu_Unwind_Restore_VFP
210
211
0000561cT__gnu_Unwind_Restore_VFP_D
212
213
0000562cT__gnu_Unwind_Restore_VFP_D_16_to_31
214
215
000056c4T__gnu_Unwind_Restore_WMMXC
216
217
0000563cT__gnu_Unwind_Restore_WMMXD
218
219
00005220T__gnu_Unwind_Resume
220
221
00005200T__gnu_Unwind_Resume_or_Rethrow
222
223
00005614T__gnu_Unwind_Save_VFP
224
225
00005624T__gnu_Unwind_Save_VFP_D
226
227
00005634T__gnu_Unwind_Save_VFP_D_16_to_31
228
229
000056d8T__gnu_Unwind_Save_WMMXC
230
231
00005680T__gnu_Unwind_Save_WMMXD
232
233
00005864T__gnu_unwind_execute
234
235
00005be0T__gnu_unwind_frame
236
237
0000499ct__gnu_unwind_pr_common
238
239
00004678T__gtsf2
240
241
00004680T__lesf2
242
243
00004680T__ltsf2
244
245
00003c20T__muldf3
246
247
00004380T__mulsf3
248
249
00004688T__nesf2
250
251
000055f8T__restore_core_regs
252
253
00003870T__subdf3
254
255
00004138T__subsf3
256
257
00004090T__truncdfsf2
258
259
000036acT__udivsi3
260
261
000076d4A_bss_end__
262
263
00007658A_edata
264
265
000076d4A_end
266
267
00003590t_getTime
268
269
00080000N_stack
270
271
Uabort
272
273
000020c8TappDeinit
274
275
00002238TappInit
276
277
00002ee0TappRender
278
279
Ucos
280
281
00001ec8tdrawGLObject
282
283
00001f18tdrawModels
284
285
U
free
286
287
000020a8tfreeGLObject
288
289
00007654DgAppAlive
290
291
00004d64tget_eit_entry
292
293
Ugettimeofday
294
295
UglBlendFunc
296
297
UglClear
298
299
UglClearColorx
300
301
UglColor4x
302
303
UglColorPointer
304
305
UglDisable
306
307
UglDisableClientState
308
309
UglDrawArrays
310
311
UglEnable
312
313
UglEnableClientState
314
315
UglFrustumx
316
317
UglLightxv
318
319
UglLoadIdentity
320
321
UglMaterialx
322
323
UglMaterialxv
324
325
UglMatrixMode
326
327
UglMultMatrixx
328
329
UglNormalPointer
330
331
UglPopMatrix
332
333
UglPushMatrix
334
335
UglRotatex
336
337
UglScalex
338
339
UglShadeModel
340
341
UglTranslatex
342
343
UglVertexPointer
344
345
UglViewport
346
347
00001e1cTimportGLDeinit
348
349
00001e18TimportGLInit
350
351
000075ecdlight0Diffuse.3407
352
353
000075dcdlight0Position.3406
354
355
0000760cdlight1Diffuse.3409
356
357
000075fcdlight1Position.3408
358
359
0000762cdlight2Diffuse.3411
360
361
0000761cdlight2Position.3410
362
363
Umalloc
364
365
0000763cdmaterialSpecular.3412
366
367
Umemcpy
368
369
000020f4tnewGLObject
370
371
000057a0tnext_unwind_byte
372
373
Upow
374
375
0000610crquadVertices.3337
376
377
000055f8Trestore_core_regs
378
379
00004e98trestore_non_core_regs
380
381
000074bcdsCamTracks
382
383
000076bcbsCurrentCamTrack
384
385
000076c0bsCurrentCamTrackStartTick
386
387
000076c4bsDemoStopped
388
389
000076b4bsGroundPlane
390
391
000074b8dsNextCamTrackStartTick
392
393
00007658bsRandomSeed
394
395
000076b8bsStartTick
396
397
0000765cbsSuperShapeObjects
398
399
00005c20rsSuperShapeParams
400
401
000076b0bsTick
402
403
000076c8bsTimeOffset
404
405
000076d0bsTimeOffsetInit
406
407
000076ccbsTimeStopped
408
409
00007650dsWindowHeight
410
411
0000764cdsWindowWidth
412
413
000048e4tsearch_EIT_table
414
415
000048cctselfrel_offset31
416
417
Usin
418
419
Usqrt
420
421
00002164tssFunc
422
423
00001e20tsuperShapeMap
424
425
00005830tunwind_UCB_from_context
426
427
00005104tunwind_phase2
428
429
00004fcctunwind_phase2_forced
这里可以看到几乎所有的函数名全局变量名都会被导出。其中有Java_com_example_SanAngeles_为前缀的JNI接口函数,有importGLInit这些普通函数,有freeGLObject这些局部(static)函数,还有sStartTick等全局变量名。其实在这个动态发布的时候,只需要导出java_com_开头的jni函数就可以了,里面这些细节函数名完全不需要暴露出来。
如何做到这一点呢?首先,我们需要了解gcc新引进的选项-fvisibility=hidden,这个编译选项可以把所有的符号名(包括函数名和全局变量名)都强制标记成隐藏属性。我们可以在Android.mk中可以通过修改LOCAL_CFLAGS选项加入-fvisibility=hidden来做到这一点,这样编译之后的.so看到的符号表为:
001
000033d0tJava_com_example_SanAngeles_DemoGLSurfaceView_nativePause
002
00003408tJava_com_example_SanAngeles_DemoRenderer_nativeDone
003
0000344ctJava_com_example_SanAngeles_DemoRenderer_nativeInit
004
00003384tJava_com_example_SanAngeles_DemoRenderer_nativeRender
005
00003414tJava_com_example_SanAngeles_DemoRenderer_nativeResize
006
00007104a_DYNAMIC
007
000071dca_GLOBAL_OFFSET_TABLE_
008
0000554cT_Unwind_Backtrace
009
00004748T_Unwind_Complete
010
0000474cT_Unwind_DeleteException
011
00005528T_Unwind_ForcedUnwind
012
00004740T_Unwind_GetCFA
013
000055d0T_Unwind_GetDataRelBase
014
000045fct_Unwind_GetGR
015
000055d8t_Unwind_GetGR
016
00005608T_Unwind_GetLanguageSpecificData
017
00005624T_Unwind_GetRegionStart
018
000055c8T_Unwind_GetTextRelBase
019
000054bcT_Unwind_RaiseException
020
000054e0T_Unwind_Resume
021
00005504T_Unwind_Resume_or_Rethrow
022
00004670t_Unwind_SetGR
023
000045b0T_Unwind_VRS_Get
024
0000505cT_Unwind_VRS_Pop
025
00004624T_Unwind_VRS_Set
026
0000459ct_Unwind_decode_target2
027
0000554cT___Unwind_Backtrace
028
00005528T___Unwind_ForcedUnwind
029
000054bcT___Unwind_RaiseException
030
000054e0T___Unwind_Resume
031
00005504T___Unwind_Resume_or_Rethrow
032
00003644T__adddf3
033
00003f0cT__addsf3
034
000044c8T__aeabi_cfcmpeq
035
000044c8T__aeabi_cfcmple
036
000044b8T__aeabi_cfrcmple
037
00003e60T__aeabi_d2f
038
00003644T__aeabi_dadd
039
00003c5cT__aeabi_ddiv
040
000039f0T__aeabi_dmul
041
00003638T__aeabi_drsub
042
00003640T__aeabi_dsub
043
0000393cT__aeabi_f2d
044
00004540T__aeabi_f2iz
045
00003f0cT__aeabi_fadd
046
000044dcT__aeabi_fcmpeq
047
00004518T__aeabi_fcmpge
048
0000452cT__aeabi_fcmpgt
049
00004504T__aeabi_fcmple
050
000044f0T__aeabi_fcmplt
051
000042e8T__aeabi_fdiv
052
00004150T__aeabi_fmul
053
00003f00T__aeabi_frsub
054
00003f08T__aeabi_fsub
055
00003914T__aeabi_i2d
056
000040a4T__aeabi_i2f
057
00003540T__aeabi_idiv
058
00003634T__aeabi_idiv0
059
0000361cT__aeabi_idivmod
060
00003990T__aeabi_l2d
061
000040d4T__aeabi_l2f
062
00003634T__aeabi_ldiv0
063
000038f0T__aeabi_ui2d
064
0000409cT__aeabi_ui2f
065
0000347cT__aeabi_uidiv
066
00003528T__aeabi_uidivmod
067
0000397cT__aeabi_ul2d
068
000040c4T__aeabi_ul2f
069
00004b2cT__aeabi_unwind_cpp_pr0
070
00004b24W__aeabi_unwind_cpp_pr1
071
00004b1cW__aeabi_unwind_cpp_pr2
072
U__android_log_print
073
000074a4A__bss_end__
074
00007428A__bss_start
075
00007428A__bss_start__
076
00004458T__cmpsf2
077
w__cxa_begin_cleanup
078
w__cxa_call_unexpected
079
w__cxa_type_match
080
00007288D__data_start
081
00003634T__div0
082
00003c5cT__divdf3
083
000042e8T__divsf3
084
00003540T__divsi3
085
000074a4A__end__
086
00004458T__eqsf2
087
00006104A__exidx_end
088
00005f74A__exidx_start
089
0000393cT__extendsfdf2
090
00004540T__fixsfsi
091
00003990T__floatdidf
092
000040d4T__floatdisf
093
00003914T__floatsidf
094
000040a4T__floatsisf
095
0000397cT__floatundidf
096
000040c4T__floatundisf
097
000038f0T__floatunsidf
098
0000409cT__floatunsisf
099
00004448T__gesf2
100
00004cd4T__gnu_Unwind_Backtrace
101
w__gnu_Unwind_Find_exidx
102
00004eb8T__gnu_Unwind_ForcedUnwind
103
00004f2cT__gnu_Unwind_RaiseException
104
000053dcT__gnu_Unwind_Restore_VFP
105
000053ecT__gnu_Unwind_Restore_VFP_D
106
000053fcT__gnu_Unwind_Restore_VFP_D_16_to_31
107
00005494T__gnu_Unwind_Restore_WMMXC
108
0000540cT__gnu_Unwind_Restore_WMMXD
109
00004ff0T__gnu_Unwind_Resume
110
00004fd0T__gnu_Unwind_Resume_or_Rethrow
111
000053e4T__gnu_Unwind_Save_VFP
112
000053f4T__gnu_Unwind_Save_VFP_D
113
00005404T__gnu_Unwind_Save_VFP_D_16_to_31
114
000054a8T__gnu_Unwind_Save_WMMXC
115
00005450T__gnu_Unwind_Save_WMMXD
116
00005634T__gnu_unwind_execute
117
000059b0T__gnu_unwind_frame
118
0000476ct__gnu_unwind_pr_common
119
00004448T__gtsf2
120
00004450T__lesf2
121
00004450T__ltsf2
122
000039f0T__muldf3
123
00004150T__mulsf3
124
00004458T__nesf2
125
000053c8T__restore_core_regs
126
00003640T__subdf3
127
00003f08T__subsf3
128
00003e60T__truncdfsf2
129
0000347cT__udivsi3
130
000074a4A_bss_end__
131
00007428A_edata
132
000074a4A_end
133
00003360t_getTime
134
00080000N_stack
135
Uabort
136
00001e98tappDeinit
137
00002008tappInit
138
00002cb0tappRender
139
Ucos
140
00001c98tdrawGLObject
141
00001ce8tdrawModels
142
U
free
143
00001e78tfreeGLObject
144
00007424dgAppAlive
145
00004b34tget_eit_entry
146
Ugettimeofday
147
UglBlendFunc
148
UglClear
149
UglClearColorx
150
UglColor4x
151
UglColorPointer
152
UglDisable
153
UglDisableClientState
154
UglDrawArrays
155
UglEnable
156
UglEnableClientState
157
UglFrustumx
158
UglLightxv
159
UglLoadIdentity
160
UglMaterialx
161
UglMaterialxv
162
UglMatrixMode
163
UglMultMatrixx
164
UglNormalPointer
165
UglPopMatrix
166
UglPushMatrix
167
UglRotatex
168
UglScalex
169
UglShadeModel
170
UglTranslatex
171
UglVertexPointer
172
UglViewport
173
00001bectimportGLDeinit
174
00001be8timportGLInit
175
000073bcdlight0Diffuse.3407
176
000073acdlight0Position.3406
177
000073dcdlight1Diffuse.3409
178
000073ccdlight1Position.3408
179
000073fcdlight2Diffuse.3411
180
000073ecdlight2Position.3410
181
Umalloc
182
0000740cdmaterialSpecular.3412
183
Umemcpy
184
00001ec4tnewGLObject
185
00005570tnext_unwind_byte
186
Upow
187
00005edcrquadVertices.3337
188
000053c8Trestore_core_regs
189
00004c68trestore_non_core_regs
190
0000728cdsCamTracks
191
0000748cbsCurrentCamTrack
192
00007490bsCurrentCamTrackStartTick
193
00007494bsDemoStopped
194
00007484bsGroundPlane
195
00007288dsNextCamTrackStartTick
196
00007428bsRandomSeed
197
00007488bsStartTick
198
0000742cbsSuperShapeObjects
199
000059f0rsSuperShapeParams
200
00007480bsTick
201
00007498bsTimeOffset
202
000074a0bsTimeOffsetInit
203
0000749cbsTimeStopped
204
00007420dsWindowHeight
205
0000741cdsWindowWidth
206
000046b4tsearch_EIT_table
207
0000469ctselfrel_offset31
208
Usin
209
Usqrt
210
00001f34tssFunc
211
00001bf0tsuperShapeMap
212
00005600tunwind_UCB_from_context
213
00004ed4tunwind_phase2
214
00004d9ctunwind_phase2_forced
这里可以看到所有源代码里出现的函数名和全局变量名(符号名)都变成了't',也就是说都是局部符号(类似于static),这样这些函数名主程序是看不到的。我们还需要把jni的入口函数变成'T'类型才行,我们可以修改jni入口函数的属性来导出这些入口函数,比如app-android.c中的Java_com_example_SanAngeles_DemoRenderer_nativeInit函数,可以改为:
1
void
__attribute__
((visibility(
"default"
)))
2
Java_com_example_SanAngeles_DemoRenderer_nativeInit(JNIEnv*env)
3
{
4
importGLInit();
5
appInit();
6
gAppAlive=1;
7
sDemoStopped=0;
8
sTimeOffsetInit=0;
9
}
其他几个Java_com_example_SanAngeles_开头的函数也这样修改一下即可。这样编译之后我们看到的符号表里所有Java_com_example_SanAngeles_开头的函数又变成'T'类型了。
最后我们还有一个问题就是如何隐藏那些局部符号名呢(t类型的符号)?我们可以调用strip-x来去掉这些局部的符号名。我们可以通过修改Android.mk重定义cmd-strip这个命令来实现,修改后的Android.mk如下:
01
LOCAL_PATH:=$(callmy-
dir
)
02
03
cmd-strip=$(TOOLCHAIN_PREFIX)strip--strip-debug-x$1
04
05
include$(CLEAR_VARS)
06
07
LOCAL_MODULE:=sanangeles
08
09
LOCAL_CFLAGS:=-DANDROID_NDK\
10
-DDISABLE_IMPORTGL\
11
-fvisibility=hidden
12
13
LOCAL_SRC_FILES:=\
14
importgl.c\
15
demo.c\
16
app-android.c\
17
18
LOCAL_LDLIBS:=-lGLESv1_CM-ldl-llog
19
20
include$(BUILD_SHARED_LIBRARY)
这样每次编译之后会自动strip掉这些局部的符号名,如下:
001
00003540TJava_com_example_SanAngeles_DemoGLSurfaceView_nativePause
002
00003578TJava_com_example_SanAngeles_DemoRenderer_nativeDone
003
000035bcTJava_com_example_SanAngeles_DemoRenderer_nativeInit
004
000034f4TJava_com_example_SanAngeles_DemoRenderer_nativeRender
005
00003584TJava_com_example_SanAngeles_DemoRenderer_nativeResize
006
000056bcT_Unwind_Backtrace
007
000048b8T_Unwind_Complete
008
000048bcT_Unwind_DeleteException
009
00005698T_Unwind_ForcedUnwind
010
000048b0T_Unwind_GetCFA
011
00005740T_Unwind_GetDataRelBase
012
00005778T_Unwind_GetLanguageSpecificData
013
00005794T_Unwind_GetRegionStart
014
00005738T_Unwind_GetTextRelBase
015
0000562cT_Unwind_RaiseException
016
00005650T_Unwind_Resume
017
00005674T_Unwind_Resume_or_Rethrow
018
00004720T_Unwind_VRS_Get
019
000051ccT_Unwind_VRS_Pop
020
00004794T_Unwind_VRS_Set
021
000056bcT___Unwind_Backtrace
022
00005698T___Unwind_ForcedUnwind
023
0000562cT___Unwind_RaiseException
024
00005650T___Unwind_Resume
025
00005674T___Unwind_Resume_or_Rethrow
026
000037b4T__adddf3
027
0000407cT__addsf3
028
00004638T__aeabi_cfcmpeq
029
00004638T__aeabi_cfcmple
030
00004628T__aeabi_cfrcmple
031
00003fd0T__aeabi_d2f
032
000037b4T__aeabi_dadd
033
00003dccT__aeabi_ddiv
034
00003b60T__aeabi_dmul
035
000037a8T__aeabi_drsub
036
000037b0T__aeabi_dsub
037
00003aacT__aeabi_f2d
038
000046b0T__aeabi_f2iz
039
0000407cT__aeabi_fadd
040
0000464cT__aeabi_fcmpeq
041
00004688T__aeabi_fcmpge
042
0000469cT__aeabi_fcmpgt
043
00004674T__aeabi_fcmple
044
00004660T__aeabi_fcmplt
045
00004458T__aeabi_fdiv
046
000042c0T__aeabi_fmul
047
00004070T__aeabi_frsub
048
00004078T__aeabi_fsub
049
00003a84T__aeabi_i2d
050
00004214T__aeabi_i2f
051
000036b0T__aeabi_idiv
052
000037a4T__aeabi_idiv0
053
0000378cT__aeabi_idivmod
054
00003b00T__aeabi_l2d
055
00004244T__aeabi_l2f
056
000037a4T__aeabi_ldiv0
057
00003a60T__aeabi_ui2d
058
0000420cT__aeabi_ui2f
059
000035ecT__aeabi_uidiv
060
00003698T__aeabi_uidivmod
061
00003aecT__aeabi_ul2d
062
00004234T__aeabi_ul2f
063
00004c9cT__aeabi_unwind_cpp_pr0
064
00004c94W__aeabi_unwind_cpp_pr1
065
00004c8cW__aeabi_unwind_cpp_pr2
066
U__android_log_print
067
00007614A__bss_end__
068
00007598A__bss_start
069
00007598A__bss_start__
070
000045c8T__cmpsf2
071
w__cxa_begin_cleanup
072
w__cxa_call_unexpected
073
w__cxa_type_match
074
000073f8D__data_start
075
000037a4T__div0
076
00003dccT__divdf3
077
00004458T__divsf3
078
000036b0T__divsi3
079
00007614A__end__
080
000045c8T__eqsf2
081
00006274A__exidx_end
082
000060e4A__exidx_start
083
00003aacT__extendsfdf2
084
000046b0T__fixsfsi
085
00003b00T__floatdidf
086
00004244T__floatdisf
087
00003a84T__floatsidf
088
00004214T__floatsisf
089
00003aecT__floatundidf
090
00004234T__floatundisf
091
00003a60T__floatunsidf
092
0000420cT__floatunsisf
093
000045b8T__gesf2
094
00004e44T__gnu_Unwind_Backtrace
095
w__gnu_Unwind_Find_exidx
096
00005028T__gnu_Unwind_ForcedUnwind
097
0000509cT__gnu_Unwind_RaiseException
098
0000554cT__gnu_Unwind_Restore_VFP
099
0000555cT__gnu_Unwind_Restore_VFP_D
100
0000556cT__gnu_Unwind_Restore_VFP_D_16_to_31
101
00005604T__gnu_Unwind_Restore_WMMXC
102
0000557cT__gnu_Unwind_Restore_WMMXD
103
00005160T__gnu_Unwind_Resume
104
00005140T__gnu_Unwind_Resume_or_Rethrow
105
00005554T__gnu_Unwind_Save_VFP
106
00005564T__gnu_Unwind_Save_VFP_D
107
00005574T__gnu_Unwind_Save_VFP_D_16_to_31
108
00005618T__gnu_Unwind_Save_WMMXC
109
000055c0T__gnu_Unwind_Save_WMMXD
110
000057a4T__gnu_unwind_execute
111
00005b20T__gnu_unwind_frame
112
000045b8T__gtsf2
113
000045c0T__lesf2
114
000045c0T__ltsf2
115
00003b60T__muldf3
116
000042c0T__mulsf3
117
000045c8T__nesf2
118
00005538T__restore_core_regs
119
000037b0T__subdf3
120
00004078T__subsf3
121
00003fd0T__truncdfsf2
122
000035ecT__udivsi3
123
00007614A_bss_end__
124
00007598A_edata
125
00007614A_end
126
00080000N_stack
127
Uabort
128
Ucos
129
U
free
130
Ugettimeofday
131
UglBlendFunc
132
UglClear
133
UglClearColorx
134
UglColor4x
135
UglColorPointer
136
UglDisable
137
UglDisableClientState
138
UglDrawArrays
139
UglEnable
140
UglEnableClientState
141
UglFrustumx
142
UglLightxv
143
UglLoadIdentity
144
UglMaterialx
145
UglMaterialxv
146
UglMatrixMode
147
UglMultMatrixx
148
UglNormalPointer
149
UglPopMatrix
150
UglPushMatrix
151
UglRotatex
152
UglScalex
153
UglShadeModel
154
UglTranslatex
155
UglVertexPointer
156
UglViewport
157
Umalloc
158
Umemcpy
159
Upow
160
00005538Trestore_core_regs
161
Usin
162
Usqrt
这样局部符号都没有了,只有jni入口函数被导出。这样提高了jni动态库的安全性,同时.so文件的大小也小了不少。
关于elf文件的更多资料,可以参考
如果要了解gcc和strip更多的选项,请移步
补充隐藏和显示方式:
#defineDLL_LOCAL__attribute__((visibility("hidden")))
#defineDLL_CLASS__attribute__((visibility("default")))
LOCAL_CFLAGS+=-fvisibility=hidden#默认隐藏符号
相关文章推荐
- Android 安全机制一:allowBackup安全风险描述
- android 应用完全退出
- Android.mk的用法和基础
- Android UI效果之绘图篇(三)
- win32 ios android 获取系统时间
- android特殊字符
- android 之MVP模式的入门
- Android事件驱动机制--选择事件
- Android性能优化之Bitmap的内存优化
- Android--向SD卡读写数据
- android 自定义具有反弹效果的ScrollView
- Android高级控件----AdapterView与Adapter
- android源码社区和相关资料
- Android实现推送方式解决方案
- java和android的基础
- 在Android中实现推送方式的底层原理与推送的知识及相关解决方案
- Android 蓝牙的使用(待续)
- Gradle:Plugin is too old,please update to a more recent version
- <<Android源码设计模式解析与实战>>读书笔记----- Android NDK开发学习
- Android 编程下 Touch 事件的分发和消费机制