大熊猫猪侯佩 (︶^︶)

hopy是一只贪吃贪睡爱鹅鹅的大熊猫猪

gdb中的define命令

可以使用define命令达到类似于display的效果:比如每ni后显示当前5条指令: define s5 ni x/5i $pc end 甚至可以手动传入要显示指令的条数: define s ni x/arg0iarg0i pc end 然后这样使用:s 5我...

2015-04-19 16:29:23

阅读数 1295

评论数 0

javascript、ruby和C性能一瞥(3) :上汇编

在博文(1)和(2)里分别用了4中方式写一个素数筛选的算法,分别是javascript in browser、node.js、ruby和c;最终的结果是c最快,node.js其次,js in b虽然也不慢,但极不稳定,所以排在第三,ruby最慢。现在我们在linux64中用汇编语言重写sieve算...

2015-04-16 09:42:22

阅读数 1497

评论数 0

Mac OS X下64位汇编与Linux下64位汇编的一些不同

1 首先系统调用号大大的不同;mac64和linux32的系统调用号也不同(虽然局部可能有相同)2 mac64的系统调用号在:/usr/include/sys/syscall.h可以查到,但是调用的时候其值要加上0x2000000,可以写一个宏处理:%define mk64 0x2000000+使...

2015-04-13 18:08:01

阅读数 3524

评论数 7

Mac OS X版本的sublime text 3安装汇编语言语法支持

sublime是个好东西,小巧、功能强大而且跨平台! 不过默认的语法里没有对asm的支持,这让本猫情何以堪… 下面介绍一下Mac OS X中如何给sublime安装汇编的语法和自动汇编命令补全支持。1 首先要找到sublime的Packages的安装目录,可以在sublime程序菜单中找到Pa...

2015-04-13 15:23:50

阅读数 10815

评论数 7

linux下64位汇编的系统调用(5)

看到这里大家都基本知道了如何进行linux下的汇编系统调用;不过有些童鞋可能会问:那些C库中函数里为我们解决的额外汇编代码你是怎么知道的? 好吧,我承认:我是通过逆向知道的,这貌似有点犯规的嫌疑… 比如举个例子,那上一篇里的mmap C库函数来说,首先写一个C代码:#include <s...

2015-04-12 10:33:37

阅读数 1558

评论数 0

linux下64位汇编的系统调用(4)

经过上一篇的铺垫貌似可以很轻松的用汇编写出mmap的代码来,可仔细一看,还是有不少问题需要解决:1.系统调用mmap如果出错并不直接返回MAP_FAILED(-1),而是一个“类似”值;C库中的mmap函数对其做了包装,使其最终返回-1;如果我们直接调用mmap syscall,则这些事必须自己来...

2015-04-12 10:12:47

阅读数 2205

评论数 0

linux下64位汇编的系统调用(3)

背景知识基本交代清楚了,下面我们实际写一个小例子看一下。代码的功能很简单,显示一行文本,然后退出。我们使用了syscall中的write和exit调用,查一下前面的调用号和参数,我们初步总结如下:write(即sys_write)调用号为1,需传递3个参数unsigned int fd const...

2015-04-12 09:50:03

阅读数 2310

评论数 1

linux下64位汇编的系统调用(2)

知道了syscall调用号之后还不算完,还要搞清楚2件事:1 每种调用号需要传递哪些参数; 2 调用如何传递参数以及结果如何返回;第一个问题的答案是: 在linux系统中某个程序执行时进行的系统调用可以通过strace命令来查看,solaris中对应的命令为dtrace,而mac os x中可...

2015-04-11 20:19:30

阅读数 3349

评论数 0

ubuntu下如何安装codeblocks集成开发环境

codeblocks是一个十分优秀的C/C++开发IDE,虽然后起之秀codelite目前来看大有超越之势哦。 不过在ubuntu下安装codeblocks却比较麻烦,不像其他linux发行版,比如suse,debian和fedora等在官网上有现成的bin文件可以直接下载安装。 下面简单介绍...

2015-04-11 19:29:16

阅读数 3647

评论数 6

linux下64位汇编的系统调用(1)

现在基本上系统都是64位了,而64位系统下的汇编和32位有了较大的变化,无论是系统调用的接口还是C标准库的接口都和32位汇编有所不同;下面简单谈一下在64位linux下如何利用汇编直接调用系统调用。需要准备的有:1.一台linux机器:我的系统是ubuntu 14.10 x64版; 2.还要一个...

2015-04-11 19:05:47

阅读数 2819

评论数 0

nasm预处理器(4)

nasm定义了一套标准宏,当开始处理源文件时,这些宏都已经被定义了,如果希望程序在执行前没有预定义的宏存在,可以使用%clear清空预处理器的一切宏。__NASM_MAJOR__ 主版本号 __NASM_MINOR__ 次版本号 __NASM_SUBMINOR__ 子次版本号 __NASM_...

2015-04-07 15:24:51

阅读数 826

评论数 0

nasm预处理器(3)

nasm提供一个限定符.nolist,可以包含它到一个宏定义中,这样该宏就不会在列表文件中被展开;限定符 .nolist直接放到参数后面:%macro foo 1.nolist条件汇编 和C预处理器类似,nasm允许对一段源代码只在某特定条件满足时进行汇编:%if<condition>...

2015-04-07 14:05:10

阅读数 870

评论数 0

nasm预处理器(2)

多行宏 %macro:%macro foo 2 push rax push rbx mov rax,%1 mov rbx,%2 pop rbx pop rax %endmacro宏名称后的数字代表宏参数的个数,宏主体中的%1和%2分别代表实际的参数。...

2015-04-07 11:53:13

阅读数 832

评论数 0

nasm预处理器(1)

与处理器将所有以反斜杠结尾的连续行合并为一行。单行的宏以%define来定义;当单行的宏被扩展后还含有其他宏时,会在执行时而不是定义时展开。%define a(x) 1+b(x) %define b(x) 2*x mov ax,a(8)会被最终展开为mov ax,1+2*8,但宏b不是在定义宏a时...

2015-04-07 10:46:19

阅读数 1006

评论数 0

nasm中的表达式

nasm表达式支持2个特殊的记号 $和$$;前者标识其所在源码行的开始处地址,所以你可以这样写死循环:jmp $而后者标识当前段开始处的地址,你可以通过:$-$$找出当前代码在段内的偏移。 nasm提供以下运算符: | ^ & << >> + - * / //...

2015-04-07 10:07:38

阅读数 865

评论数 0

nasm汇编一些需要注意的地方

经常用msam或tasm的童鞋一下转换到nasm下可能觉得不怎么适应,它们应该先去晓习一下gas的语法,然后就适应了…that‘s only a joke! :)section .data v101 dq 0x1234567811223344;代码中有 mov rdx,[v101] mov [ra...

2015-04-07 09:28:04

阅读数 2212

评论数 0

Mac OS X汇编语言常识

首先OS X的syscall表位置在/usr/include/sys/syscall.h

2015-04-06 21:16:23

阅读数 4797

评论数 0

linux中syscall调用号查看

可以用locate查找:locate unistd_32 //或者 locate unistd_64以下是本猫在ubuntu下返回的结果:/usr/src/linux-headers-3.16.0-33/arch/sh/include/uapi/asm/unistd_32.h //和 /usr/s...

2015-04-06 11:27:40

阅读数 3081

评论数 0

javascript、ruby和C性能一瞥(2)

好吧,最后让我们用C来实现,看看再能榨取多少性能。注意我没有改变算法,C的算法和之前的3种都是基本相同的:#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <math....

2015-04-01 17:42:24

阅读数 1283

评论数 0

javascript、ruby和C性能一瞥(1)

测试一下本地js、浏览器中的js以及ruby对于类似算法的性能。结果有些意外:浏览器js最快,本地其次当相差很小;ruby最慢而且不是一个数量级的; 因为写的匆忙,可能有重大问题没能看出来,请各位高人不吝赐教。 代码均未作优化,我们依次来看: 首先是浏览器的:<!DOCTYPE htm...

2015-04-01 15:50:48

阅读数 969

评论数 0

提示
确定要删除当前文章?
取消 删除