2016-07-26 ruki
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机。 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用、能用、轻量就行,如果觉得代码架构设计的不是很好的话,也不用过于吐槽哈。。 虽然我还有写过两个比较成熟的虚拟机项目(jvm和avm),虽然架构上比这个更完善,更容易扩展,功能也更强大 但是毕竟是给公司写的,没法拿出来分享。。 背景 先说说,为什么要写这个东西。。 之前有段时间,我在用ida逆向分析某些程序的算法,并且要把它提取出来将其跨平台运行,这个时候我首先考虑到是ida的F5插件 毕竟这个可以直接反成c/c++代码,还是很强大的,基本上98%的x86汇编代码,我在通过 继续阅读 »
2016-07-02 YongHao Hu
C++
一个程序在运行过程中,函数调用时会向栈压入: 原来寄存器ebp的值, 参数, 以及调用函数的下一个指令地址 在调用一个函数时, 编译器就计算好函数需要的空间, 然后esp = ebp-需要的空间, 通过ebp+偏移量来访问. 在函数里调用另外一个函数时, 原来fun的ebp值压栈 继续阅读 »
2014-07-05 Mithrilwoodrat
有时候老是忘记,记下常用的条件码和设置条件.(下面从CSAPP第三章中摘抄) CF : 进位标志,最近的操作使最高位产生了进位, 可以用来检查无符号操作数的溢出. ZF : 零标志, 最近的操作得出的结果为0. SF : 符号标志, 最近的操作得到的结果为负数. 继续阅读 »
2016-11-13 ruki
在分析了各大开源协程库实现后,最终选择参考boost.context的汇编实现,来写tbox的切换内核。 在这过程中,我对boost各个架构平台下的context切换,都进行了分析和测试。 在macosx i386和mips平台上实现协程切换时,发现boost那套汇编实现是有问题的,如果放到tbox切换demo上运行,会直接挂掉。 在分析这两个架构上,boost.context切换实现问题,这边先贴下tbox上的context切换demo,方便之后的讲解: 继续阅读 »
2016-10-30 ruki
新特性 为解释器作用域增加一些内建模块支持 针对windows x64平台,支持ml64汇编器 改进 增强ipairs和pairs接口,支持过滤器模式,简化脚本代码 为vs201x工程生成增加文件filter 移除core/tools目录以及msys工具链,在windows上使用xmake自编译core源码进行安装,优化xmake源码磁盘空间 移除xmake/packages,默认模板安装不再内置二进制packages,暂时需要手动放置,以后再做成自动包依赖下载编译 Bugs修复 修复msvc的编译选项不支持问题:-def:xxx.def 修复ml.exe汇编器脚本 修复选项链接顺序问题 继续阅读 »
2016-05-09 YongHao Hu
C++
编译的详细过程 以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 继续阅读 »
2014-09-03 ALEX LIN
最近公司开发的Windows软件总是被360检出病毒,特别恼火。总结了几种方法。 1. 程序数字签名 基本上在第一轮和杀毒软件的PK中绝大多数是会通过的,但是在程序中包含特征码那另当别论,杀毒软件立即会报毒。 2. 编译器选项 在VC++里有#pragma code_seg("PAGE")//其中PAGE是区段的名称。这个是免杀中最有用的一个编译器选项,它可以把cpp文件里的代码放到一个单独的区段里,这样在对付杀毒软件的代码查杀的时候,给我们带来了非常大的方便。 3. VC++ 源代码中加入汇编语句 c++ __asm { nop //汇编指令 nop nop nop } 4. 继续阅读 »
2013-08-30 Lingxian Kong
今天看《程序员面试宝典》时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下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; 继续阅读 »
2014-10-06 Mithrilwoodrat
[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 继续阅读 »
2017-02-17 blademainer
openjdk目录结构 ``` ├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现) │ ├─os 操作系相关代码 │ ├─os_cpu 继续阅读 »