调试命令笔记

make CROSS_COMPILE=arm-linux-androideabi-

  make kernelmenuconfig V=1
 2187  vim scripts/Makefile.build 
 2188  make kernelmenuconfig V=1
 2189  grep -rn kernelmenuconfig ./ 
 2190  make -f scripts/Makefile.build obj=scripts/basic
 2191  vim Makefile
 2192  make config

 2193  make kernelmenuconfig V=1


*#446633#

# mount -t debugfs debugfs debugfs 

mount -t debugfs none /sys/kernel/debug


git pull origin master:my_test

adb remount && adb push ./fp_server/obj/fp_server /data/thh/tee_02/tee


am start -n com.mediatek.mtklogger/com.mediatek.mtklogger.MainActivity
/data/misc/gionee/veba3

addr2line -C -f -e obj/local/armeabi/libsyjt.so 5ce8eb10

,arm-eabi-addr2line -C -f -e symbols/system/lib/*.so addr


du -h --max-depth=1 ./android_mtk_6755_mp/

scp counter@192.168.8.254:/home/veb-software/L26_6755_66_BBL7516A_M0.MP7.V1_160217_ALPS-0707-2000.tar.gz  /home/safeic/Work/


LOCAL_LDFLAGS := -Wl,--hash-style=sysv

libsysv-hash-table-library_ldflags := -Wl,--hash-style=sysv

update-alternatives --config java

update-alternatives --config javac


那么我们进入到cd /etc/udev/rules.d/下,新建一个51-Android.rules文件(sudo  vim  51-android.rules),

在这个文件中写上:

SUBSYSTEM=="usb", ATTRS{idVendor}==" 0bb4", ATTRS{idProduct}=="0c02",MODE="0666"
保存,再为51-android.rules加上权限(sudo chmod a+x 51-android.rules).


readelf -s

nm elf

这里可以看到几乎所有的函数名全局变量名都会被导出。其中有Java_com_example_SanAngeles_为前缀的

JNI接口函数,有importGLInit这些普通函数,有freeGLObject这些局部(static)函数,还有sStartTick等

全局变量名。其实在这个动态发布的时候,只需要导出java_com_开头的jni函数就可以了,里面这些细节函数名

完全不需要暴露出来。

如何做到这一点呢?首先,我们需要了解gcc新引进的选项-fvisibility=hidden,这个编译选项可以把所有的

符号名(包括函数名和全局变量名)都强制标记成隐藏属性。我们可以在Android.mk中可以通过修改

LOCAL_CFLAGS选项加入-fvisibility=hidden来做到这一点,

这里可以看到所有源代码里出现的函数名和全局变量名(符号名)都变成了't',也就是说都是局部符号

(类似于static),这样这些函数名主程序是看不到的。我们还需要把jni的入口函数变成'T'类型才行,

我们可以修改jni入口函数的属性来导出这些入口函数,比如app-android.c中的

Java_com_example_SanAngeles_DemoRenderer_nativeInit函数,可以改为:
jni 中static 声明后导致隐藏,无法看到。 show source
1void__attribute__ ((visibility ("default")))

2Java_com_example_SanAngeles_DemoRenderer_nativeInit ( JNIEnv*  env )

最后我们还有一个问题就是如何隐藏那些局部符号名呢(t类型的符号)?我们可以调用strip -x

去掉这些局部的符号名。我们可以通过修改Android.mk重定义cmd-strip这个命令来实现,修改后

的Android.mk如下:

show source
LOCAL_PATH := $(call my-dir)
cmd-strip = $(TOOLCHAIN_PREFIX)strip --strip-debug -x $1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值