简介
这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机。
非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用、能用、轻量就行,如果觉得代码架构设计的不是很好的话,也不用过于吐槽哈。。
虽然我还有写过两个比较成熟的虚拟机项目(jvm和avm),虽然架构上比这个更完善,更容易扩展,功能也更强大
但是毕竟是给公司写的,没法拿出来分享。。
背景
先说说,为什么要写这个东西。。
之前有段时间,我在用ida逆向分析某些程序的算法,并且要把它提取出来将其跨平台运行,这个时候我首先考虑到是ida的F5插件
毕竟这个可以直接反成c/c++代码,还是很强大的,基本上98%的x86汇编代码,我在通过
继续阅读 »
一个程序在运行过程中,函数调用时会向栈压入: 原来寄存器ebp的值, 参数, 以及调用函数的下一个指令地址
在调用一个函数时, 编译器就计算好函数需要的空间, 然后esp = ebp-需要的空间, 通过ebp+偏移量来访问. 在函数里调用另外一个函数时, 原来fun的ebp值压栈
继续阅读 »
有时候老是忘记,记下常用的条件码和设置条件.(下面从CSAPP第三章中摘抄)
CF : 进位标志,最近的操作使最高位产生了进位, 可以用来检查无符号操作数的溢出.
ZF : 零标志, 最近的操作得出的结果为0.
SF : 符号标志, 最近的操作得到的结果为负数.
继续阅读 »
在分析了各大开源协程库实现后,最终选择参考boost.context的汇编实现,来写tbox的切换内核。
在这过程中,我对boost各个架构平台下的context切换,都进行了分析和测试。
在macosx i386和mips平台上实现协程切换时,发现boost那套汇编实现是有问题的,如果放到tbox切换demo上运行,会直接挂掉。
在分析这两个架构上,boost.context切换实现问题,这边先贴下tbox上的context切换demo,方便之后的讲解:
继续阅读 »
新特性
为解释器作用域增加一些内建模块支持
针对windows x64平台,支持ml64汇编器
改进
增强ipairs和pairs接口,支持过滤器模式,简化脚本代码
为vs201x工程生成增加文件filter
移除core/tools目录以及msys工具链,在windows上使用xmake自编译core源码进行安装,优化xmake源码磁盘空间
移除xmake/packages,默认模板安装不再内置二进制packages,暂时需要手动放置,以后再做成自动包依赖下载编译
Bugs修复
修复msvc的编译选项不支持问题:-def:xxx.def
修复ml.exe汇编器脚本
修复选项链接顺序问题
继续阅读 »
编译的详细过程
以hello.c的源文件为例, C/C++编译, 链接与装载的流程是
gcc -E 将hello.c预处理, 把所有的宏展开, 解析#ifndef, 删除注释等, 得到translation unit(编译单元) hello.i文件.
gcc -S 将hello.i编译成汇编文件hello.s
gcc -c 汇编器as将hello.s编译成成目标文件hello.o
gcc 链接器ld将hello.o链接成可执行文件a.out
继续阅读 »
最近公司开发的Windows软件总是被360检出病毒,特别恼火。总结了几种方法。
1. 程序数字签名
基本上在第一轮和杀毒软件的PK中绝大多数是会通过的,但是在程序中包含特征码那另当别论,杀毒软件立即会报毒。
2. 编译器选项
在VC++里有#pragma code_seg("PAGE")//其中PAGE是区段的名称。这个是免杀中最有用的一个编译器选项,它可以把cpp文件里的代码放到一个单独的区段里,这样在对付杀毒软件的代码查杀的时候,给我们带来了非常大的方便。
3. VC++ 源代码中加入汇编语句
c++
__asm
{
nop //汇编指令
nop
nop
nop
}
4.
继续阅读 »
今天看《程序员面试宝典》时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题。本文只是为初学者,大牛可以飘过~
C源代码如下:
#include "stdafx.h"
int main(int argc, char* argv[])
{
char a=1;
char c[] = "1234567890";
char *p = "1234567890";
a = c[1];
a = p[1];
return 0;
继续阅读 »
[CDATA[<p class="text"
在coursera上有个csapp有关的公开课 The Hardware/Software Interface
上面的lib2和csapp上的二进制炸弹实验一样,但是是64位的=.=,于是我还是去 http://csapp.cs.cmu.edu/public/labs.html上下载了一个32位的文件来练习.
下面是第一关的反汇编
Dump of assembler code for function phase_1:
0x08048b20 <+0>: push %ebp
继续阅读 »
openjdk目录结构
```
├─agent Serviceability Agent的客户端实现
├─make 用来build出HotSpot的各种配置文件
├─src HotSpot VM的源代码
│ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现)
│ ├─os 操作系相关代码
│ ├─os_cpu
继续阅读 »