BruceFan's Blog

Stay hungry, stay foolish

0%

trace使用

(1) 在代码中加入调试命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.dalviktestapp;

import android.app.Activity;
import android.os.Bundle;
import android.os.Debug;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test();
}

public static void test() {
// 调用Android调试模式下的调试方法
Debug.startMethodTracing("/sdcard/test");
System.out.println("Hello Dalvik");
Debug.stopMethodTracing();
}
}
阅读全文 »

linux_x64与linux_x86的区别

主要两点:
1.内存地址的范围由32位变成了64位,但是可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常。
2.参数传递方式发生改变,x86参数都是保存在栈上,x64中的前6个参数依次保存在rdi, rsi, rdx, rcx, r8r9中,如果有更多参数则保存在栈上。
拿一个简单的程序演示:

阅读全文 »

makefile规则

1
2
3
4
target: prerequisites
command
...
...

target可以是一个目标文件,也可以是一个执行文件。
prerequisites是要生成target所需要的文件或是目标。
command是make需要执行的命令。(任意的shell命令)
target这一个或多个目标文件依赖于prerequisites中的文件,其生成规则定义在command中。
prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。

阅读全文 »

C++中,动态内存的管理是通过:new在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象进行初始化;delete接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。
动态内存很容易出问题,因为确保在正确的时机释放内存很困难。有时会忘了释放内存,产生内存泄露;有时还有指针引用内存就释放了它,会产生UAF。

阅读全文 »

反编译apk文件

1
$ apktool d crackme.apk outdir # 反编译apk文件夹

res/values/strings.xml存储源代码中定义的strings资源,apk文件打包时,strings.xml中的字符串被加密存储为resources.arsc文件中,apk成功反编译后该文件也会被解密出来。源程序R.java中的所有索引值保存在strings.xml同目录下的public.xml文件中。

阅读全文 »