这里以ida7.0版本为例 ida理论上支持各种文件的查看包括exe,dll , so等等
主要界面了解

汇编界面转源代码界面


使用F5快捷键进入

右键选择hide casts后界面好看多了

668是什么鬼?继续优化
选中env变量名右键选择se lvar type 或者使用快捷键Y ,然后填入JNIEnv*

这时,代码舒爽多了

快速查看当前文件所包含的字符串
使用shift+F12快捷键
本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 码出一个新世界
Loop指令和cx寄存器配合使用, 用于循环操作,类似于高级语言中的do while循环
1 | mov cx,循环次数 |
标号的名称可以自定义
loop 标号位置时,程序不知道是个循环体, 当做正常流程代码执行)loop 标号位置,确认是个循环体后, 先将cx减1,也就是cx=cx-1loop 标号后面的代码因此,从代码层面上看cx的值代表了循环次数, 事实上只循环了cx-1次 只不过判断之前会先执行一遍循环体, 类似于do while
根据以上结论, 如果cx的值为0, 减1后为-1, 那程序会怎么执行呢?
答案是会进入死循环 , 8086cpu是16位 的会循环执行65535次
为什么?
因为-1在计算机里面对应的十六进制为FFFF, 二进制第一位为符号位
题目: 取出以下内存地址中的值并且相加取和
1 | FFFF0H----->20h #每个内存单元存放一个字节数据 |
正常思维是使用八位寄存器取出对应地址的值,比如:
1 | mov ax,ffffh |
但是这里面存在一个问题, ach+ffh明显超出一个字节, 如果使用al寄存器接收势必数据保存不全,此时,需要再借助一个寄存器,代码修改后如下:
1 | mov ax,ffffh |
这种方式保证了数据超出后自动进位, 最后结合loop循环优化代码,如下:
1 | mov ax,ffffh |
获取数据, 除了通过ds来获取数据之外, 还可以利用其它段地址来获取, 比如:
1 | mov ax,ds:[0] |
本文为作者原创 转载时请注明出处 谢谢

java代码的执行需要编译成字节码文件然后借助java虚拟机JVM执行, 那么smali代码的执行同样需要借助虚拟机, 只不过是安卓虚拟机DalvikVM, 但是由于Dalvik虚拟机默认识别dex文件, 因此需要将smali文件封装成dex文件
1 | .class public LTest; |
1 | java -jar smali-2.4.0.jar a smali文件或目录 -o 输出目录/xxx.dex |
1 | adb push test.dex /sdcard/ |
1 | adb shell |

数据段存在的意义是为了告诉cpu, 该段物理地址存放的是数据而不是指令
那么既然里面存放的是数据, 势必会有取值和赋值
将20001H物理地址中的数据取值然后填入通用寄存器中, 如下:
1 | mov ax ,2000H |
以上有几个关键的地方需要记忆
将BH中的数据赋值给数据物理地址20001H中, 如下:
1 | mov bh,30H |
和取值类似, 反过来即可
以取值代码为例:
1 | mov ax ,2000H |
如果物理地址和数据一一对应关系如下:
1 | 20001H----->23 |
那么ax中的值是多少呢?
答案是1123 而不是23, 为什么?
这是根据寄存器容器大小决定的, 容器大装得多, 容器小装的小, 因为ax是16位容器,那么则获取16位也就是两个字节的数据,即1123, 如果是ah或者al接收的话则获取8位也就是一个字节的数据,即23
用于更改CS:IP的值
由于在8086cpu中更改段寄存器CS和指针寄存器IP的值不能直接使用mov赋值, 比如:
1 | mov CS,3000H |
以上写法不允许
那么, 如果我们需要给其赋值时, 其中一种替代方案就是使用jump指令,比如:
1 | jump 3000H:0001H # 跳转到该代码段物理地址 |
如果段地址保持不变, 只是更改偏移地址, 那么需要借助通用寄存器, 如下:
1 | mov ax,0002H |
则只需jump+保存偏移地址的寄存器 这种写法即可
注意不能直接jump 0002H 这样是不允许的
量化投资绝对是一个趋势
以米筐api为例:
1 | #需求: 获得市盈率大于50且小于65, 营业总收入前10的股票 |
本文为作者原创 转载时请注明出处 谢谢

1 | git reset --hard HEAD^ //一个^代表一个版本 如果回退两个版本那就HEAD^^ 以此类推 |
1 | git reset --hard 8383f01 //一个^代表一个版本 如果回退两个版本那就HEAD^^ 以此类推 |
1 | git reset --hard HEAD |
1 | git reset checkout . //放弃所有文件的修改 |
1 | git stash //暂存当前修改的代码 |
1 | git revert -n 版本号 |
本文为作者原创 转载时请注明出处 谢谢
