2014

发现一款基于OllyDbg的Android ARM调试工具

最近研究Android平台的原生代码so保护时找到了一款很好用的汇编级调试工具:基于OllyDbg的GikDbg,传送门:http://www.gikir.com/product.php

上学时学习汇编曾经接触过OllyDbg,用起来很是顺手,结合着IDA的静态分析,学到了不少底层的知识。

最开始研究Android原生代码逆向时用的是IDA Pro,明显看到最近的版本中,IDA一直在强化动态调试能力以及对移动平台的支持,不过实际测试时发现,虽然的arm elf可以反汇编以及分析代码,但是动态调试时其自带的android_server远程调试服务器不能很好地支持Android 2.3.3以上的系统,网上搜索看到有人说可以使用gdb server来远程调试,但是试了几次都没有成功。android_server据说在IDA 6.3版以后就可以很好地支持4.0+的系统了,无奈没有资源…

后来很幸运的找到了这个GikDbg,显示抱着试一试的想法,用4.0.3的模拟器测试了一下,发现很好用,Attach,断点等一切正常,就是反应速度稍慢,这应该是gdb远程调试的通病吧…

最开始看官网上的Android版名字叫GikDbg.ART还以为只有开启ART运行时模式才行,后来实测DVM也没有问题,而且连模拟器都能很好的支持,当然物理设备的话需要root,否则push不过去gdbserver。

使用说明在这里:http://gikir.com/blog/?p=115,Android 4.0.3模拟器DVM运行时一次成功!

熟悉一下Xcode下Mac App动态链接库的runpath

Xcode虽然已经用过很久了,但是很少接触Mac App的开发,尤其是对于Mac App的动态链接库用法更是知之甚少(大部分时间都是在做iOS开发而iOS又不支持动态链接库⊙﹏⊙b汗),果然在研究FMOD Studio的跨平台音效库时遇到了问题…先是在win32下写了一段测试代码,配合Studio工具做出的bank完成了基本加载、播放等基本逻辑,准备上Mac平台试验一下,结果一通忙活include和lib后,编译链接没问题了,停掉虾米的推荐准备听听Mac版的声音效果如何,结果一运行程序就崩溃了,看了下日志输出:

dyld: Library not loaded: @rpath/libfmodL.dylib
Referenced from: /Users/wzkres/Library/Developer/Xcode/DerivedData/CCTechDemo-gdcppdyfmrhlhzhidvykxyjrcvwo/Build/Products/Debug/CCTechDemo Mac.app/Contents/MacOS/CCTechDemo Mac
Reason: image not found

感觉有点类似win32下的没找到动态链接库的dll…不过既然是没见过的提示,还是搜索学习一下吧。

Continue reading…

Android中GLSurfaceView在横竖屏切换时重新创建表面缓冲导致的问题

在做Android的OpenGL ES应用时,经常会遇到接入各种支付SDK等弹出UI导致当前横竖屏状态切换的问题,比如游戏是横屏landscape的,而支付SDK弹出的View是竖屏portrait的,这时如果不插手处理的话,系统会对GL的表面缓冲进行重新创建的处理,比如横屏的800×480会被重新创建为480×800,这样就会导致绘图错误,效果可以参考下面stackoverflow上贴出的图片。

解决这个问题的方法是:
Continue reading…

关于Unity3D内置Blinn Phong光照模型计算在移动设备上的曝光问题

Unity3D的surface shader用起来很是方便,比直接的cg写起来省事的多,而且有很多现成的东西可以include,比如光照部分就是,常用的lambert, blinn phong都提供了现成的实现,但是最近在做specular时发现,内置(https://unity3d.com/unity/download/archive下载全部内置shader source或{unity install path}/Data/CGIncludes/Lighting.cginc Windows, /Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc Mac)的LightingBlinnPhong在移动设备上使用时会出现高光曝掉的问题!

简单看lighting.cginc中的相关函数:

Continue reading…

Realtek HD Audio前面板插口没反应的一个解决方法

主板是微星的770T-C35,机箱是一款世纪之星的不知道什么型号的,HD Audio前面板连接线已经接好主板,有防呆也不可能插反,但是耳机接入前面板3.5插口后就是没反应,查看了HD Audio控制面板,显示如下:

QQ截图20140328120922

前面板显示没有插入,也没有声音,检查了前面板接线盒主板说明书后意识到一个问题:可能接线或插口并没有按有sensor的方式连接,也就是说前面板的插口不能像后面板载的那样实时显示插头插入拔出情况,所以前面板接口一直没有声音,于是关闭掉了检测: Continue reading…

Win8的Hyper-V导致视频硬件解码DXVA失效的问题

在使用TMT,完美解码的PotPlayer, MPC HC, KMP等播放器看蓝光原盘和1080P mkv等视频时发现如果开启硬解的话,会出现“绿屏”的问题!出现问题的机器是AMD X2 245的U和HD4850显卡,Win8 64位系统,查了下资料这块显卡对视频硬解是支持的,于是第一反应是显卡驱动,试遍了amd官网的各种legacy驱动(HD4000系列已经被列入legacy了)和guru3d上的各种第三方修改,增强驱动后,均没有解决,不是绿屏就是卡死,DXVA Checker也检查了显示没问题的,然后一度以为legacy了后amd的新系统64位驱动就渣掉了,快要放弃的时候发现guru3d论坛上有人提到Win8的Hyper-V会导致硬件出问题,于是恍然大悟,之前为了玩WinPhone8的SDK和模拟器,开启了Win8自带Hyper-V虚拟机组件,于是果断卸掉,重启后再用各种播放器硬件一切恢复正常,看到CPU占用率下降,应用不卡真是一件非常舒心的事…

解决Chrome浏览器在Mac下开启新标签后出现404的问题

可能不是只在Mac下才会出这个问题,现象就是打开Chrome后新标签页原本应该显示的常用网站和搜索页面显示不出来了,而是个这样的404页面:
10dfa9ec8a13632789b4c96b938fa0ec08fac709

用开发者工具看了一下,是这个地址报404: www.google.com/_/chrome/newtab?espv=210&ie=UTF-8,而且非常奇怪的是如果先“科学上网”的话,就不会出这个404,一切正常…

Continue reading…

关于Javascript闭包closure的应用

最近在研究百度地图API的应用,试验了iOS SDK后又开始试验Web端的JS版应用,做到在地图上通过Ajax异步调用方式从后端取得数据后,添加标注并给标注添加对应的点击时间alert出此位置的信息时遇到了一个Javascript问题,最开始的code是这样写的:

		$.ajax({
			type : "get",
			url : urlStr,
			async : true,
			dataType : "json",
			error : function() {
				alert('No valid location record!');
			},
			success : function(json) {
				for(var i=0;i<json.length;i++)
				{
					var point = new BMap.Point(json[i].longtitude, json[i].latitude); 
					var marker = new BMap.Marker(point);        // 创建标注  
                                        // 添加点击事件侦听
					mark.addEventListener("click", function()
			                {
				            alert('记录时间: '+json[i].logTime+' 定位时间: '+json[i].gpsTime);
				            return;
			                });
					map.addOverlay(marker);                     // 将标注添加到地图中 
				}
		        var point = new BMap.Point(json[0].longtitude, json[0].latitude);  
        		map.centerAndZoom(point, 15);
			}
			});

这样运行时,点击任意一个标注后就会收到浏览器的js脚本错误,提示json[i].logTime还有后面同样的gpsTime部分有问题,检查了一下,发现Ajax请求成功后的函数内循环遍历数据时的i是局部变量,而每一个mark的click侦听函数内的i都为对同一个变量的引用,也就是说循环遍历后每次点击触发执行这段响应代码时的i都是同一个数,而不是认为的对应每一个mark时的i,也自然就取不到所期望的数据了!
Continue reading…

开启Gson的缩进格式Json输出

最近研究GAE上的Java支持,接触到了不少J2EE的技术,先记录一些基础小问题吧,短期内没遇到GAE硬伤导致放弃的话应该会继续丰富这方面的内容。

这次记录的是关于Java JsonGson的缩进格式输出方法。

这个库默认情况下会输出格式紧凑没有缩进的Json字符串,像这样:

{"data1":100,"data2":"hello","list":["String 1","String 2","String 3"]}

这样虽然能减少一些字节,但是开发调试时量大了的话看着会很不舒服,开启缩进格式化的方法是不要直接new Gson对象,而是使用GsonBuilder创建Gson对象,像这样:

Continue reading…