1,检查变量是否被改写
通过变量前后各插入一个字长的缓冲带(32bit的字长是4byte,64bit的字长是8byte),并且这个缓冲区均用0xCC填充(即 汇编指令的int 3)。
检查时机1:当对变量进行访问时,会检查这两个缓冲带。
检查时机2:函数返回时,进行栈检查。
只要缓冲带有任何一个字节不是0xCC,那就是变量被改写了。
2,char buff[100]溢出
首先按照普通变量的方式,在这个buff首位加上一段缓冲区(缓冲区具体大小由编译器决定),接着还是用0xCC填充。
并对这个buff的地址、大小、变量名,插入到一个错误检查链表。在函数返回时,会对这个链表进行检查。主要检查的还是这个buff的两侧缓冲带是否均被0xCC填充。
3,栈指针(EBP),栈顶(ESP)
有几种方式会导致EBP和ESP被改写:
第一种:如果通过溢出攻击的方式,会函数返回时的返回地址在栈上被改写。这就可能间接导致栈在函数进入前和退出后的关键状态不一致(EBP、ESP、前一栈帧的函数返回地址不正确等)。
第二种:栈出现与其增长的反方向溢出时,如栈是向上增长的,如果出现下溢时,可能会出现EBP指向的栈空间内容被改写,进而导致函数返回时ESP和EBP之前存储值不一致。
因此需要做一个安全cookie,这个cookie本质是一个随机数和ebp异或得到的。当要进行校验时,再异或一次就可以得到原先的ebp的值。
在vc8里面cookie有两个,一个是esp或ebp 和 随机数 异或得到的,另一个是 esp或ebp 和随机数的取反异或得到的。
4,对esp的针对性检查
函数返回时和ebp指向的帧地址进行比较。
一直在为这个标题烦恼,不知道该叫一个什么样的名字。因为最近在为一些事情在烦恼。有部分是私事,有部分是公事。差不多一半一半!一直很想抽个时间反省一下,另外就是总结一下,想出一个较为折中的应对策略。
因为一些烦恼的事情,最近不得不动怒。
我也突然觉得奇怪起来,为何会这样恼火。最终自我反省得到结论如下:
1,没有良好的长期规划。
2,事情执行受阻
3,没有得到良好的沟通,以及没有进行良好的沟通
4,管不动人,管人吃力。
首先逐条说明一下,分析角度主要从自身和非自身出发:
— 1,没有良好的长期规划 —
自身:没考虑好后续工作需要如何开展,只是想着提前解决眼前的问题,堵住领导层的嘴,并按自己的计划迭代版本,到时候领导层不经过我进行抽调任何人时,有理有据。换句话说,还是想堵住领导层的嘴,别天天想着驴不吃草,还要驴跑的快。
非自身:公司层到底想做什么,都不知道;成天变来变去。
— 2,事情执行受阻 —
自身:对部分事情存在抵触心理,有意回避。这些事情时间长了,就容易形成推动困难,进展越来越慢零的情况。
非自身:人力资源不足,因为被借调走人力。
— 3,没有得到良好的沟通,以及没有进行良好的沟通 —
自身(没有进行良好的沟通):对部分人和事存在抵触心理,不愿意接触。对部分事情感觉无所谓,有一定程度的随性,没有正确理解领导层面说话的一些含义。
非自身(没有被进行良好的沟通):领导层面过于随性,任何事情没有做好充分沟通和确定。在人员你安排上,较为随意。事先沟通不充分要借调就借调,没有周旋余地。
— 4,管不动人,管人吃力 —
自身:对一些事情和人存在抵制,原因还在于沟通与自身心态存在问题。
非自身:对方融入团队较慢。
其实纵观上面的所有分析,基本可以看出几个内容来:
1,我自身有个性,没有做控制好。
2,我没有得到基本的尊重,然后出现情绪,接着就像滚雪球一样,越滚越大。
3,其他因素
从上诉三点来看,至少个性问题是力所能及并进行改进的。后续的话还需要在个性问题上进行克制一下。至于其他两点,我也只能呵呵。
在windows上调试真机,只需要装驱动就行了。
linux上简单一些,直接插上去就可以认出usb设备,但麻烦的是需要配置相应的usb配置项,步骤如下:
1,执行一下lsusb,得到下面的东西
Bus 002 Device 002: ID 2299:1411
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
2,因为手里面的是个山寨机,所以显示不出描述来也是正常的。下面这条就是
Bus 002 Device 002: ID 2299:1411
修改/etc/udev/rules.d/51-android.rules的配置文件(如果没有这个配置文件,就直接创建好了)
SUBSYSTEM=="usb", ATTR{idVendor}=="2299", MODE="0666", GROUP="plugdev"
然后重启一下udev服务
/etc/init.d/udev restart
接着在重启adb
adb kill-server
adb start-server
装了debian 8以后,在用最新版的eclipse(mars)+adt调试android代码时,发现logcat日志是有的,但是无法显示在界面上。
查了一下网上的情况,好像很多人都有过。问题都好像出现在gtk相关的界面问题上。
有两种修改方法
— 第一种 —
相应的配置修改配置文件 /workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.ddms.prefs
为如下内容:
ddms.logcat.auotmonitor.level=error
ddms.logcat.automonitor=false
ddms.logcat.automonitor.userprompt=true
eclipse.preferences.version=1
logcat.view.colsize.Application=200
logcat.view.colsize.Level=70
logcat.view.colsize.PID=50
logcat.view.colsize.TID=50
logcat.view.colsize.Tag=170
logcat.view.colsize.Text=300
logcat.view.colsize.Time=140
— 第二种 —
或者在执行eclipse之前,设置环境变量
export SWT_GTK3=0
eclipse
我采用了第二种方式,就可以正常显示了
在debian 7下由于没有oracle jdk/jre的直接软件源可以用,只能通过现有的软件源下载到openjdk。
android studio又不支持openjdk-6,应此需要更换成openjdk-7才行。
首先,安装一下openjdk-7
apt-get openjdk-7-jdk
接着通过切换java库版本
update-alternatives --config java
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 auto mode
1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 manual mode
2 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 manual mode
选择2,以后直接启动android studio里面的sh脚本,即可