您当前位置: 首页 » 9 月 2015
按日期归档: 9 月 2015

【初学《调试大全》】vc8以后对程序栈上异常的检查几种类型

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指向的帧地址进行比较。

2015-09-15 | | 未分类

【初学《调试大全》】vc8以后对程序栈上异常的检查几种类型已关闭评论

下一步该怎么做?

一直在为这个标题烦恼,不知道该叫一个什么样的名字。因为最近在为一些事情在烦恼。有部分是私事,有部分是公事。差不多一半一半!一直很想抽个时间反省一下,另外就是总结一下,想出一个较为折中的应对策略。

因为一些烦恼的事情,最近不得不动怒。

我也突然觉得奇怪起来,为何会这样恼火。最终自我反省得到结论如下:

1,没有良好的长期规划。

2,事情执行受阻

3,没有得到良好的沟通,以及没有进行良好的沟通

4,管不动人,管人吃力。

 

首先逐条说明一下,分析角度主要从自身和非自身出发:

— 1,没有良好的长期规划 —

自身:没考虑好后续工作需要如何开展,只是想着提前解决眼前的问题,堵住领导层的嘴,并按自己的计划迭代版本,到时候领导层不经过我进行抽调任何人时,有理有据。换句话说,还是想堵住领导层的嘴,别天天想着驴不吃草,还要驴跑的快。

非自身:公司层到底想做什么,都不知道;成天变来变去。

— 2,事情执行受阻 —

自身:对部分事情存在抵触心理,有意回避。这些事情时间长了,就容易形成推动困难,进展越来越慢零的情况。

非自身:人力资源不足,因为被借调走人力。

— 3,没有得到良好的沟通,以及没有进行良好的沟通 —

自身(没有进行良好的沟通):对部分人和事存在抵触心理,不愿意接触。对部分事情感觉无所谓,有一定程度的随性,没有正确理解领导层面说话的一些含义。

非自身(没有被进行良好的沟通):领导层面过于随性,任何事情没有做好充分沟通和确定。在人员你安排上,较为随意。事先沟通不充分要借调就借调,没有周旋余地。

— 4,管不动人,管人吃力 —

自身:对一些事情和人存在抵制,原因还在于沟通与自身心态存在问题。

非自身:对方融入团队较慢。

 

其实纵观上面的所有分析,基本可以看出几个内容来:

1,我自身有个性,没有做控制好。

2,我没有得到基本的尊重,然后出现情绪,接着就像滚雪球一样,越滚越大。

3,其他因素

从上诉三点来看,至少个性问题是力所能及并进行改进的。后续的话还需要在个性问题上进行克制一下。至于其他两点,我也只能呵呵。

2015-09-14 | | [窥视自我], *生活*, 思考

下一步该怎么做?已关闭评论

linux环境下调试真机的usb配置问题

在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
2015-09-11 | | [linux总结], android

linux环境下调试真机的usb配置问题已关闭评论

linux环境的中的eclipse里的logcat日志无法正常显示

装了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

我采用了第二种方式,就可以正常显示了

2015-09-09 | | [linux总结], android, NDK

linux环境的中的eclipse里的logcat日志无法正常显示已关闭评论

debian 7下安装android studio

在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脚本,即可

2015-09-01 | | android

debian 7下安装android studio已关闭评论