您的位置:首页 > 移动开发 > Android开发

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

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看到的符号表为:

showsource

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函数,可以改为:

showsource

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如下:

showsource

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掉这些局部的符号名,如下:

showsource

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更多的选项,请移步gcc和binutils的官方文档。

补充隐藏和显示方式:

#defineDLL_LOCAL__attribute__((visibility("hidden")))

#defineDLL_CLASS__attribute__((visibility("default")))

LOCAL_CFLAGS+=-fvisibility=hidden#默认隐藏符号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: