Android NDK隱藏jni動態庫的內部符號表

jackie_gnu發表於2011-12-02

http://www.wzlogs.com/2010/08/2/ndk-hide-dso-symbols.html

寫過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 
00300003600 T Java_com_example_SanAngeles_DemoGLSurfaceView_nativePause
004 
00500003638 T Java_com_example_SanAngeles_DemoRenderer_nativeDone
006 
0070000367c T Java_com_example_SanAngeles_DemoRenderer_nativeInit
008 
009000035b4 T Java_com_example_SanAngeles_DemoRenderer_nativeRender
010 
01100003644 T Java_com_example_SanAngeles_DemoRenderer_nativeResize
012 
01300007334 a _DYNAMIC
014 
0150000740c a _GLOBAL_OFFSET_TABLE_
016 
0170000577c T _Unwind_Backtrace
018 
01900004978 T _Unwind_Complete
020 
0210000497c T _Unwind_DeleteException
022 
02300005758 T _Unwind_ForcedUnwind
024 
02500004970 T _Unwind_GetCFA
026 
02700005800 T _Unwind_GetDataRelBase
028 
02900005808 t _Unwind_GetGR
030 
0310000482c t _Unwind_GetGR
032 
03300005838 T _Unwind_GetLanguageSpecificData
034 
03500005854 T _Unwind_GetRegionStart
036 
037000057f8 T _Unwind_GetTextRelBase
038 
039000056ec T _Unwind_RaiseException
040 
04100005710 T _Unwind_Resume
042 
04300005734 T _Unwind_Resume_or_Rethrow
044 
045000048a0 t _Unwind_SetGR
046 
047000047e0 T _Unwind_VRS_Get
048 
0490000528c T _Unwind_VRS_Pop
050 
05100004854 T _Unwind_VRS_Set
052 
053000047cc t _Unwind_decode_target2
054 
0550000577c T ___Unwind_Backtrace
056 
05700005758 T ___Unwind_ForcedUnwind
058 
059000056ec T ___Unwind_RaiseException
060 
06100005710 T ___Unwind_Resume
062 
06300005734 T ___Unwind_Resume_or_Rethrow
064 
06500003874 T __adddf3
066 
0670000413c T __addsf3
068 
069000046f8 T __aeabi_cfcmpeq
070 
071000046f8 T __aeabi_cfcmple
072 
073000046e8 T __aeabi_cfrcmple
074 
07500004090 T __aeabi_d2f
076 
07700003874 T __aeabi_dadd
078 
07900003e8c T __aeabi_ddiv
080 
08100003c20 T __aeabi_dmul
082 
08300003868 T __aeabi_drsub
084 
08500003870 T __aeabi_dsub
086 
08700003b6c T __aeabi_f2d
088 
08900004770 T __aeabi_f2iz
090 
0910000413c T __aeabi_fadd
092 
0930000470c T __aeabi_fcmpeq
094 
09500004748 T __aeabi_fcmpge
096 
0970000475c T __aeabi_fcmpgt
098 
09900004734 T __aeabi_fcmple
100 
10100004720 T __aeabi_fcmplt
102 
10300004518 T __aeabi_fdiv
104 
10500004380 T __aeabi_fmul
106 
10700004130 T __aeabi_frsub
108 
10900004138 T __aeabi_fsub
110 
11100003b44 T __aeabi_i2d
112 
113000042d4 T __aeabi_i2f
114 
11500003770 T __aeabi_idiv
116 
11700003864 T __aeabi_idiv0
118 
1190000384c T __aeabi_idivmod
120 
12100003bc0 T __aeabi_l2d
122 
12300004304 T __aeabi_l2f
124 
12500003864 T __aeabi_ldiv0
126 
12700003b20 T __aeabi_ui2d
128 
129000042cc T __aeabi_ui2f
130 
131000036ac T __aeabi_uidiv
132 
13300003758 T __aeabi_uidivmod
134 
13500003bac T __aeabi_ul2d
136 
137000042f4 T __aeabi_ul2f
138 
13900004d5c T __aeabi_unwind_cpp_pr0
140 
14100004d54 W __aeabi_unwind_cpp_pr1
142 
14300004d4c W __aeabi_unwind_cpp_pr2
144 
145        U __android_log_print
146 
147000076d4 A __bss_end__
148 
14900007658 A __bss_start
150 
15100007658 A __bss_start__
152 
15300004688 T __cmpsf2
154 
155        w __cxa_begin_cleanup
156 
157        w __cxa_call_unexpected
158 
159        w __cxa_type_match
160 
161000074b8 D __data_start
162 
16300003864 T __div0
164 
16500003e8c T __divdf3
166 
16700004518 T __divsf3
168 
16900003770 T __divsi3
170 
171000076d4 A __end__
172 
17300004688 T __eqsf2
174 
17500006334 A __exidx_end
176 
177000061a4 A __exidx_start
178 
17900003b6c T __extendsfdf2
180 
18100004770 T __fixsfsi
182 
18300003bc0 T __floatdidf
184 
18500004304 T __floatdisf
186 
18700003b44 T __floatsidf
188 
189000042d4 T __floatsisf
190 
19100003bac T __floatundidf
192 
193000042f4 T __floatundisf
194 
19500003b20 T __floatunsidf
196 
197000042cc T __floatunsisf
198 
19900004678 T __gesf2
200 
20100004f04 T __gnu_Unwind_Backtrace
202 
203        w __gnu_Unwind_Find_exidx
204 
205000050e8 T __gnu_Unwind_ForcedUnwind
206 
2070000515c T __gnu_Unwind_RaiseException
208 
2090000560c T __gnu_Unwind_Restore_VFP
210 
2110000561c T __gnu_Unwind_Restore_VFP_D
212 
2130000562c T __gnu_Unwind_Restore_VFP_D_16_to_31
214 
215000056c4 T __gnu_Unwind_Restore_WMMXC
216 
2170000563c T __gnu_Unwind_Restore_WMMXD
218 
21900005220 T __gnu_Unwind_Resume
220 
22100005200 T __gnu_Unwind_Resume_or_Rethrow
222 
22300005614 T __gnu_Unwind_Save_VFP
224 
22500005624 T __gnu_Unwind_Save_VFP_D
226 
22700005634 T __gnu_Unwind_Save_VFP_D_16_to_31
228 
229000056d8 T __gnu_Unwind_Save_WMMXC
230 
23100005680 T __gnu_Unwind_Save_WMMXD
232 
23300005864 T __gnu_unwind_execute
234 
23500005be0 T __gnu_unwind_frame
236 
2370000499c t __gnu_unwind_pr_common
238 
23900004678 T __gtsf2
240 
24100004680 T __lesf2
242 
24300004680 T __ltsf2
244 
24500003c20 T __muldf3
246 
24700004380 T __mulsf3
248 
24900004688 T __nesf2
250 
251000055f8 T __restore_core_regs
252 
25300003870 T __subdf3
254 
25500004138 T __subsf3
256 
25700004090 T __truncdfsf2
258 
259000036ac T __udivsi3
260 
261000076d4 A _bss_end__
262 
26300007658 A _edata
264 
265000076d4 A _end
266 
26700003590 t _getTime
268 
26900080000 N _stack
270 
271        U abort
272 
273000020c8 T appDeinit
274 
27500002238 T appInit
276 
27700002ee0 T appRender
278 
279        U cos
280 
28100001ec8 t drawGLObject
282 
28300001f18 t drawModels
284 
285        U free
286 
287000020a8 t freeGLObject
288 
28900007654 D gAppAlive
290 
29100004d64 t get_eit_entry
292 
293        U gettimeofday
294 
295        U glBlendFunc
296 
297        U glClear
298 
299        U glClearColorx
300 
301        U glColor4x
302 
303        U glColorPointer
304 
305        U glDisable
306 
307        U glDisableClientState
308 
309        U glDrawArrays
310 
311        U glEnable
312 
313        U glEnableClientState
314 
315        U glFrustumx
316 
317        U glLightxv
318 
319        U glLoadIdentity
320 
321        U glMaterialx
322 
323        U glMaterialxv
324 
325        U glMatrixMode
326 
327        U glMultMatrixx
328 
329        U glNormalPointer
330 
331        U glPopMatrix
332 
333        U glPushMatrix
334 
335        U glRotatex
336 
337        U glScalex
338 
339        U glShadeModel
340 
341        U glTranslatex
342 
343        U glVertexPointer
344 
345        U glViewport
346 
34700001e1c T importGLDeinit
348 
34900001e18 T importGLInit
350 
351000075ec d light0Diffuse.3407
352 
353000075dc d light0Position.3406
354 
3550000760c d light1Diffuse.3409
356 
357000075fc d light1Position.3408
358 
3590000762c d light2Diffuse.3411
360 
3610000761c d light2Position.3410
362 
363        U malloc
364 
3650000763c d materialSpecular.3412
366 
367        U memcpy
368 
369000020f4 t newGLObject
370 
371000057a0 t next_unwind_byte
372 
373        U pow
374 
3750000610c r quadVertices.3337
376 
377000055f8 T restore_core_regs
378 
37900004e98 t restore_non_core_regs
380 
381000074bc d sCamTracks
382 
383000076bc b sCurrentCamTrack
384 
385000076c0 b sCurrentCamTrackStartTick
386 
387000076c4 b sDemoStopped
388 
389000076b4 b sGroundPlane
390 
391000074b8 d sNextCamTrackStartTick
392 
39300007658 b sRandomSeed
394 
395000076b8 b sStartTick
396 
3970000765c b sSuperShapeObjects
398 
39900005c20 r sSuperShapeParams
400 
401000076b0 b sTick
402 
403000076c8 b sTimeOffset
404 
405000076d0 b sTimeOffsetInit
406 
407000076cc b sTimeStopped
408 
40900007650 d sWindowHeight
410 
4110000764c d sWindowWidth
412 
413000048e4 t search_EIT_table
414 
415000048cc t selfrel_offset31
416 
417        U sin
418 
419        U sqrt
420 
42100002164 t ssFunc
422 
42300001e20 t superShapeMap
424 
42500005830 t unwind_UCB_from_context
426 
42700005104 t unwind_phase2
428 
42900004fcc t unwind_phase2_forced

這裡可以看到幾乎所有的函式名全域性變數名都會被匯出。其中有Java_com_example_SanAngeles_為字首的JNI介面函式,有importGLInit這些普通函式,有freeGLObject這些區域性(static)函式,還有sStartTick等全域性變數名。其實在這個動態釋出的時候,只需要匯出java_com_開頭的jni函式就可以了,裡面這些細節函式名完全不需要暴露出來。

如何做到這一點呢?首先,我們需要了解gcc新引進的選項-fvisibility=hidden,這個編譯選項可以把所有的符號名(包括函式名和全域性變數名)都強制標記成隱藏屬性。我們可以在Android.mk中可以通過修改LOCAL_CFLAGS選項加入-fvisibility=hidden來做到這一點,這樣編譯之後的.so看到的符號表為:

 

001000033d0 t Java_com_example_SanAngeles_DemoGLSurfaceView_nativePause
00200003408 t Java_com_example_SanAngeles_DemoRenderer_nativeDone
0030000344c t Java_com_example_SanAngeles_DemoRenderer_nativeInit
00400003384 t Java_com_example_SanAngeles_DemoRenderer_nativeRender
00500003414 t Java_com_example_SanAngeles_DemoRenderer_nativeResize
00600007104 a _DYNAMIC
007000071dc a _GLOBAL_OFFSET_TABLE_
0080000554c T _Unwind_Backtrace
00900004748 T _Unwind_Complete
0100000474c T _Unwind_DeleteException
01100005528 T _Unwind_ForcedUnwind
01200004740 T _Unwind_GetCFA
013000055d0 T _Unwind_GetDataRelBase
014000045fc t _Unwind_GetGR
015000055d8 t _Unwind_GetGR
01600005608 T _Unwind_GetLanguageSpecificData
01700005624 T _Unwind_GetRegionStart
018000055c8 T _Unwind_GetTextRelBase
019000054bc T _Unwind_RaiseException
020000054e0 T _Unwind_Resume
02100005504 T _Unwind_Resume_or_Rethrow
02200004670 t _Unwind_SetGR
023000045b0 T _Unwind_VRS_Get
0240000505c T _Unwind_VRS_Pop
02500004624 T _Unwind_VRS_Set
0260000459c t _Unwind_decode_target2
0270000554c T ___Unwind_Backtrace
02800005528 T ___Unwind_ForcedUnwind
029000054bc T ___Unwind_RaiseException
030000054e0 T ___Unwind_Resume
03100005504 T ___Unwind_Resume_or_Rethrow
03200003644 T __adddf3
03300003f0c T __addsf3
034000044c8 T __aeabi_cfcmpeq
035000044c8 T __aeabi_cfcmple
036000044b8 T __aeabi_cfrcmple
03700003e60 T __aeabi_d2f
03800003644 T __aeabi_dadd
03900003c5c T __aeabi_ddiv
040000039f0 T __aeabi_dmul
04100003638 T __aeabi_drsub
04200003640 T __aeabi_dsub
0430000393c T __aeabi_f2d
04400004540 T __aeabi_f2iz
04500003f0c T __aeabi_fadd
046000044dc T __aeabi_fcmpeq
04700004518 T __aeabi_fcmpge
0480000452c T __aeabi_fcmpgt
04900004504 T __aeabi_fcmple
050000044f0 T __aeabi_fcmplt
051000042e8 T __aeabi_fdiv
05200004150 T __aeabi_fmul
05300003f00 T __aeabi_frsub
05400003f08 T __aeabi_fsub
05500003914 T __aeabi_i2d
056000040a4 T __aeabi_i2f
05700003540 T __aeabi_idiv
05800003634 T __aeabi_idiv0
0590000361c T __aeabi_idivmod
06000003990 T __aeabi_l2d
061000040d4 T __aeabi_l2f
06200003634 T __aeabi_ldiv0
063000038f0 T __aeabi_ui2d
0640000409c T __aeabi_ui2f
0650000347c T __aeabi_uidiv
06600003528 T __aeabi_uidivmod
0670000397c T __aeabi_ul2d
068000040c4 T __aeabi_ul2f
06900004b2c T __aeabi_unwind_cpp_pr0
07000004b24 W __aeabi_unwind_cpp_pr1
07100004b1c W __aeabi_unwind_cpp_pr2
072        U __android_log_print
073000074a4 A __bss_end__
07400007428 A __bss_start
07500007428 A __bss_start__
07600004458 T __cmpsf2
077        w __cxa_begin_cleanup
078        w __cxa_call_unexpected
079        w __cxa_type_match
08000007288 D __data_start
08100003634 T __div0
08200003c5c T __divdf3
083000042e8 T __divsf3
08400003540 T __divsi3
085000074a4 A __end__
08600004458 T __eqsf2
08700006104 A __exidx_end
08800005f74 A __exidx_start
0890000393c T __extendsfdf2
09000004540 T __fixsfsi
09100003990 T __floatdidf
092000040d4 T __floatdisf
09300003914 T __floatsidf
094000040a4 T __floatsisf
0950000397c T __floatundidf
096000040c4 T __floatundisf
097000038f0 T __floatunsidf
0980000409c T __floatunsisf
09900004448 T __gesf2
10000004cd4 T __gnu_Unwind_Backtrace
101        w __gnu_Unwind_Find_exidx
10200004eb8 T __gnu_Unwind_ForcedUnwind
10300004f2c T __gnu_Unwind_RaiseException
104000053dc T __gnu_Unwind_Restore_VFP
105000053ec T __gnu_Unwind_Restore_VFP_D
106000053fc T __gnu_Unwind_Restore_VFP_D_16_to_31
10700005494 T __gnu_Unwind_Restore_WMMXC
1080000540c T __gnu_Unwind_Restore_WMMXD
10900004ff0 T __gnu_Unwind_Resume
11000004fd0 T __gnu_Unwind_Resume_or_Rethrow
111000053e4 T __gnu_Unwind_Save_VFP
112000053f4 T __gnu_Unwind_Save_VFP_D
11300005404 T __gnu_Unwind_Save_VFP_D_16_to_31
114000054a8 T __gnu_Unwind_Save_WMMXC
11500005450 T __gnu_Unwind_Save_WMMXD
11600005634 T __gnu_unwind_execute
117000059b0 T __gnu_unwind_frame
1180000476c t __gnu_unwind_pr_common
11900004448 T __gtsf2
12000004450 T __lesf2
12100004450 T __ltsf2
122000039f0 T __muldf3
12300004150 T __mulsf3
12400004458 T __nesf2
125000053c8 T __restore_core_regs
12600003640 T __subdf3
12700003f08 T __subsf3
12800003e60 T __truncdfsf2
1290000347c T __udivsi3
130000074a4 A _bss_end__
13100007428 A _edata
132000074a4 A _end
13300003360 t _getTime
13400080000 N _stack
135        U abort
13600001e98 t appDeinit
13700002008 t appInit
13800002cb0 t appRender
139        U cos
14000001c98 t drawGLObject
14100001ce8 t drawModels
142        U free
14300001e78 t freeGLObject
14400007424 d gAppAlive
14500004b34 t get_eit_entry
146        U gettimeofday
147        U glBlendFunc
148        U glClear
149        U glClearColorx
150        U glColor4x
151        U glColorPointer
152        U glDisable
153        U glDisableClientState
154        U glDrawArrays
155        U glEnable
156        U glEnableClientState
157        U glFrustumx
158        U glLightxv
159        U glLoadIdentity
160        U glMaterialx
161        U glMaterialxv
162        U glMatrixMode
163        U glMultMatrixx
164        U glNormalPointer
165        U glPopMatrix
166        U glPushMatrix
167        U glRotatex
168        U glScalex
169        U glShadeModel
170        U glTranslatex
171        U glVertexPointer
172        U glViewport
17300001bec t importGLDeinit
17400001be8 t importGLInit
175000073bc d light0Diffuse.3407
176000073ac d light0Position.3406
177000073dc d light1Diffuse.3409
178000073cc d light1Position.3408
179000073fc d light2Diffuse.3411
180000073ec d light2Position.3410
181        U malloc
1820000740c d materialSpecular.3412
183        U memcpy
18400001ec4 t newGLObject
18500005570 t next_unwind_byte
186        U pow
18700005edc r quadVertices.3337
188000053c8 T restore_core_regs
18900004c68 t restore_non_core_regs
1900000728c d sCamTracks
1910000748c b sCurrentCamTrack
19200007490 b sCurrentCamTrackStartTick
19300007494 b sDemoStopped
19400007484 b sGroundPlane
19500007288 d sNextCamTrackStartTick
19600007428 b sRandomSeed
19700007488 b sStartTick
1980000742c b sSuperShapeObjects
199000059f0 r sSuperShapeParams
20000007480 b sTick
20100007498 b sTimeOffset
202000074a0 b sTimeOffsetInit
2030000749c b sTimeStopped
20400007420 d sWindowHeight
2050000741c d sWindowWidth
206000046b4 t search_EIT_table
2070000469c t selfrel_offset31
208        U sin
209        U sqrt
21000001f34 t ssFunc
21100001bf0 t superShapeMap
21200005600 t unwind_UCB_from_context
21300004ed4 t unwind_phase2
21400004d9c t unwind_phase2_forced

這裡可以看到所有原始碼裡出現的函式名和全域性變數名(符號名)都變成了't',也就是說都是區域性符號(類似於static),這樣這些函式名主程式是看不到的。我們還需要把jni的入口函式變成'T'型別才行,我們可以修改jni入口函式的屬性來匯出這些入口函式,比如app-android.c中的Java_com_example_SanAngeles_DemoRenderer_nativeInit函式,可以改為:

 

1void__attribute__ ((visibility ("default")))
2Java_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如下:

 

01LOCAL_PATH := $(call my-dir)
02 
03cmd-strip = $(TOOLCHAIN_PREFIX)strip --strip-debug -x $1
04 
05include $(CLEAR_VARS)
06 
07LOCAL_MODULE := sanangeles
08 
09LOCAL_CFLAGS := -DANDROID_NDK \
10                -DDISABLE_IMPORTGL \
11                -fvisibility=hidden
12 
13LOCAL_SRC_FILES := \
14    importgl.c \
15    demo.c \
16    app-android.c \
17 
18LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog  
19 
20include $(BUILD_SHARED_LIBRARY)

這樣每次編譯之後會自動strip掉這些區域性的符號名,如下:

 

00100003540 T Java_com_example_SanAngeles_DemoGLSurfaceView_nativePause
00200003578 T Java_com_example_SanAngeles_DemoRenderer_nativeDone
003000035bc T Java_com_example_SanAngeles_DemoRenderer_nativeInit
004000034f4 T Java_com_example_SanAngeles_DemoRenderer_nativeRender
00500003584 T Java_com_example_SanAngeles_DemoRenderer_nativeResize
006000056bc T _Unwind_Backtrace
007000048b8 T _Unwind_Complete
008000048bc T _Unwind_DeleteException
00900005698 T _Unwind_ForcedUnwind
010000048b0 T _Unwind_GetCFA
01100005740 T _Unwind_GetDataRelBase
01200005778 T _Unwind_GetLanguageSpecificData
01300005794 T _Unwind_GetRegionStart
01400005738 T _Unwind_GetTextRelBase
0150000562c T _Unwind_RaiseException
01600005650 T _Unwind_Resume
01700005674 T _Unwind_Resume_or_Rethrow
01800004720 T _Unwind_VRS_Get
019000051cc T _Unwind_VRS_Pop
02000004794 T _Unwind_VRS_Set
021000056bc T ___Unwind_Backtrace
02200005698 T ___Unwind_ForcedUnwind
0230000562c T ___Unwind_RaiseException
02400005650 T ___Unwind_Resume
02500005674 T ___Unwind_Resume_or_Rethrow
026000037b4 T __adddf3
0270000407c T __addsf3
02800004638 T __aeabi_cfcmpeq
02900004638 T __aeabi_cfcmple
03000004628 T __aeabi_cfrcmple
03100003fd0 T __aeabi_d2f
032000037b4 T __aeabi_dadd
03300003dcc T __aeabi_ddiv
03400003b60 T __aeabi_dmul
035000037a8 T __aeabi_drsub
036000037b0 T __aeabi_dsub
03700003aac T __aeabi_f2d
038000046b0 T __aeabi_f2iz
0390000407c T __aeabi_fadd
0400000464c T __aeabi_fcmpeq
04100004688 T __aeabi_fcmpge
0420000469c T __aeabi_fcmpgt
04300004674 T __aeabi_fcmple
04400004660 T __aeabi_fcmplt
04500004458 T __aeabi_fdiv
046000042c0 T __aeabi_fmul
04700004070 T __aeabi_frsub
04800004078 T __aeabi_fsub
04900003a84 T __aeabi_i2d
05000004214 T __aeabi_i2f
051000036b0 T __aeabi_idiv
052000037a4 T __aeabi_idiv0
0530000378c T __aeabi_idivmod
05400003b00 T __aeabi_l2d
05500004244 T __aeabi_l2f
056000037a4 T __aeabi_ldiv0
05700003a60 T __aeabi_ui2d
0580000420c T __aeabi_ui2f
059000035ec T __aeabi_uidiv
06000003698 T __aeabi_uidivmod
06100003aec T __aeabi_ul2d
06200004234 T __aeabi_ul2f
06300004c9c T __aeabi_unwind_cpp_pr0
06400004c94 W __aeabi_unwind_cpp_pr1
06500004c8c W __aeabi_unwind_cpp_pr2
066        U __android_log_print
06700007614 A __bss_end__
06800007598 A __bss_start
06900007598 A __bss_start__
070000045c8 T __cmpsf2
071        w __cxa_begin_cleanup
072        w __cxa_call_unexpected
073        w __cxa_type_match
074000073f8 D __data_start
075000037a4 T __div0
07600003dcc T __divdf3
07700004458 T __divsf3
078000036b0 T __divsi3
07900007614 A __end__
080000045c8 T __eqsf2
08100006274 A __exidx_end
082000060e4 A __exidx_start
08300003aac T __extendsfdf2
084000046b0 T __fixsfsi
08500003b00 T __floatdidf
08600004244 T __floatdisf
08700003a84 T __floatsidf
08800004214 T __floatsisf
08900003aec T __floatundidf
09000004234 T __floatundisf
09100003a60 T __floatunsidf
0920000420c T __floatunsisf
093000045b8 T __gesf2
09400004e44 T __gnu_Unwind_Backtrace
095        w __gnu_Unwind_Find_exidx
09600005028 T __gnu_Unwind_ForcedUnwind
0970000509c T __gnu_Unwind_RaiseException
0980000554c T __gnu_Unwind_Restore_VFP
0990000555c T __gnu_Unwind_Restore_VFP_D
1000000556c T __gnu_Unwind_Restore_VFP_D_16_to_31
10100005604 T __gnu_Unwind_Restore_WMMXC
1020000557c T __gnu_Unwind_Restore_WMMXD
10300005160 T __gnu_Unwind_Resume
10400005140 T __gnu_Unwind_Resume_or_Rethrow
10500005554 T __gnu_Unwind_Save_VFP
10600005564 T __gnu_Unwind_Save_VFP_D
10700005574 T __gnu_Unwind_Save_VFP_D_16_to_31
10800005618 T __gnu_Unwind_Save_WMMXC
109000055c0 T __gnu_Unwind_Save_WMMXD
110000057a4 T __gnu_unwind_execute
11100005b20 T __gnu_unwind_frame
112000045b8 T __gtsf2
113000045c0 T __lesf2
114000045c0 T __ltsf2
11500003b60 T __muldf3
116000042c0 T __mulsf3
117000045c8 T __nesf2
11800005538 T __restore_core_regs
119000037b0 T __subdf3
12000004078 T __subsf3
12100003fd0 T __truncdfsf2
122000035ec T __udivsi3
12300007614 A _bss_end__
12400007598 A _edata
12500007614 A _end
12600080000 N _stack
127        U abort
128        U cos
129        U free
130        U gettimeofday
131        U glBlendFunc
132        U glClear
133        U glClearColorx
134        U glColor4x
135        U glColorPointer
136        U glDisable
137        U glDisableClientState
138        U glDrawArrays
139        U glEnable
140        U glEnableClientState
141        U glFrustumx
142        U glLightxv
143        U glLoadIdentity
144        U glMaterialx
145        U glMaterialxv
146        U glMatrixMode
147        U glMultMatrixx
148        U glNormalPointer
149        U glPopMatrix
150        U glPushMatrix
151        U glRotatex
152        U glScalex
153        U glShadeModel
154        U glTranslatex
155        U glVertexPointer
156        U glViewport
157        U malloc
158        U memcpy
159        U pow
16000005538 T restore_core_regs
161        U sin
162        U sqrt

這樣區域性符號都沒有了,只有jni入口函式被匯出。這樣提高了jni動態庫的安全性,同時.so檔案的大小也小了不少。

關於elf檔案的更多資料,可以參考這篇文章

如果要了解gcc和strip更多的選項,請移步gccbinutils的官方文件。

相關文章