- 博客(20)
- 资源 (8)
- 收藏
- 关注
原创 gdb中的define命令
可以使用define命令达到类似于display的效果:比如每ni后显示当前5条指令: define s5 ni x/5i $pc end甚至可以手动传入要显示指令的条数: define s ni x/arg0iarg0i pc end然后这样使用:s 5我们还可以再加点料,ni后自动显示某些reg的值: define s ni printf “r
2015-04-19 16:29:23 1771
原创 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 1815
原创 Mac OS X下64位汇编与Linux下64位汇编的一些不同
1 首先系统调用号大大的不同;mac64和linux32的系统调用号也不同(虽然局部可能有相同)2 mac64的系统调用号在:/usr/include/sys/syscall.h可以查到,但是调用的时候其值要加上0x2000000,可以写一个宏处理:%define mk64 0x2000000+使用方式如下:mov rax,mk64 1 ;exit NOmov rdi,0
2015-04-13 18:08:01 4086 7
原创 Mac OS X版本的sublime text 3安装汇编语言语法支持
sublime是个好东西,小巧、功能强大而且跨平台! 不过默认的语法里没有对asm的支持,这让本猫情何以堪… 下面介绍一下Mac OS X中如何给sublime安装汇编的语法和自动汇编命令补全支持。1 首先要找到sublime的Packages的安装目录,可以在sublime程序菜单中找到Packages的目录: 我系统中的目录为:/Users/apple/Library/Applicat
2015-04-13 15:23:50 11715 7
原创 linux下64位汇编的系统调用(5)
看到这里大家都基本知道了如何进行linux下的汇编系统调用;不过有些童鞋可能会问:那些C库中函数里为我们解决的额外汇编代码你是怎么知道的? 好吧,我承认:我是通过逆向知道的,这貌似有点犯规的嫌疑… 比如举个例子,那上一篇里的mmap C库函数来说,首先写一个C代码:#include <stdlib.h>#include <stdio.h>#include <stdbool.h>#inclu
2015-04-12 10:33:37 1841
原创 linux下64位汇编的系统调用(4)
经过上一篇的铺垫貌似可以很轻松的用汇编写出mmap的代码来,可仔细一看,还是有不少问题需要解决:1.系统调用mmap如果出错并不直接返回MAP_FAILED(-1),而是一个“类似”值;C库中的mmap函数对其做了包装,使其最终返回-1;如果我们直接调用mmap syscall,则这些事必须自己来做。2.C库函数如果出错会设置errno的值,而在汇编中没法直接用:extern errno的方法使用外
2015-04-12 10:12:47 2697
原创 linux下64位汇编的系统调用(3)
背景知识基本交代清楚了,下面我们实际写一个小例子看一下。代码的功能很简单,显示一行文本,然后退出。我们使用了syscall中的write和exit调用,查一下前面的调用号和参数,我们初步总结如下:write(即sys_write)调用号为1,需传递3个参数unsigned int fdconst char *bufsize_t countexit(sys_exit)调用号为60,只需传递一个错误
2015-04-12 09:50:03 2729 1
原创 linux下64位汇编的系统调用(2)
知道了syscall调用号之后还不算完,还要搞清楚2件事:1 每种调用号需要传递哪些参数; 2 调用如何传递参数以及结果如何返回;第一个问题的答案是: 在linux系统中某个程序执行时进行的系统调用可以通过strace命令来查看,solaris中对应的命令为dtrace,而mac os x中可以通过类似的dtruss命令来查看。当进程已经处于 D 状态(uninterruptible sleep
2015-04-11 20:19:30 4487
原创 ubuntu下如何安装codeblocks集成开发环境
codeblocks是一个十分优秀的C/C++开发IDE,虽然后起之秀codelite目前来看大有超越之势哦。 不过在ubuntu下安装codeblocks却比较麻烦,不像其他linux发行版,比如suse,debian和fedora等在官网上有现成的bin文件可以直接下载安装。 下面简单介绍下如何在ubuntu下快速安装最新的codeblocks:1.加入ppa源:sudo add-apt-r
2015-04-11 19:29:16 4169 6
原创 linux下64位汇编的系统调用(1)
现在基本上系统都是64位了,而64位系统下的汇编和32位有了较大的变化,无论是系统调用的接口还是C标准库的接口都和32位汇编有所不同;下面简单谈一下在64位linux下如何利用汇编直接调用系统调用。需要准备的有:1.一台linux机器:我的系统是ubuntu 14.10 x64版; 2.还要一个汇编器;我没有使用gas,而是使用了跨平台的nasm; 3.一个调试器;这里选择的不多,要不就是gdb
2015-04-11 19:05:47 4378
原创 nasm预处理器(4)
nasm定义了一套标准宏,当开始处理源文件时,这些宏都已经被定义了,如果希望程序在执行前没有预定义的宏存在,可以使用%clear清空预处理器的一切宏。__NASM_MAJOR__ 主版本号 __NASM_MINOR__ 次版本号 __NASM_SUBMINOR__ 子次版本号 __NASM_PATCHLEVEL__ 补丁号 __NASM_VERSION_ID__ nasm版本id __NA
2015-04-07 15:24:51 1103
原创 nasm预处理器(3)
nasm提供一个限定符.nolist,可以包含它到一个宏定义中,这样该宏就不会在列表文件中被展开;限定符 .nolist直接放到参数后面:%macro foo 1.nolist条件汇编 和C预处理器类似,nasm允许对一段源代码只在某特定条件满足时进行汇编:%if<condition>%elif<condition2>%else%endif%ifdef和 %ifndef 测试单行宏是否存在,
2015-04-07 14:05:10 1214
原创 nasm预处理器(2)
多行宏 %macro:%macro foo 2 push rax push rbx mov rax,%1 mov rbx,%2 pop rbx pop rax%endmacro宏名称后的数字代表宏参数的个数,宏主体中的%1和%2分别代表实际的参数。使用如下方式调用:foo 0x11,0x22如果宏参数中包含,号,可以将参数用{}包围起来。%macro
2015-04-07 11:53:13 1097
原创 nasm预处理器(1)
与处理器将所有以反斜杠结尾的连续行合并为一行。单行的宏以%define来定义;当单行的宏被扩展后还含有其他宏时,会在执行时而不是定义时展开。%define a(x) 1+b(x)%define b(x) 2*xmov ax,a(8)会被最终展开为mov ax,1+2*8,但宏b不是在定义宏a时展开的。%define定义宏是大小写敏感的,可以用%idefine来定义大小写非敏感的宏。 如果有嵌套
2015-04-07 10:46:19 1209
原创 nasm中的表达式
nasm表达式支持2个特殊的记号 $和$$;前者标识其所在源码行的开始处地址,所以你可以这样写死循环:jmp $而后者标识当前段开始处的地址,你可以通过:$-$$找出当前代码在段内的偏移。 nasm提供以下运算符: | ^ & << >> + - * / //(带符号除) % %%(带符号模) 因为%符号也被宏预处理器使用,所以必须保证带符号和无符号的模操作符都必须跟有空格。- +(一元+和
2015-04-07 10:07:38 1218
原创 nasm汇编一些需要注意的地方
经常用msam或tasm的童鞋一下转换到nasm下可能觉得不怎么适应,它们应该先去晓习一下gas的语法,然后就适应了…that‘s only a joke! :)section .datav101 dq 0x1234567811223344;代码中有mov rdx,[v101]mov [rax*2],rdx看一下生成的机器指令:0x4000b0 <_start>: 0x4000ba <_sta
2015-04-07 09:28:04 2702
原创 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/src/linux-headers-3.16.0-33/arch/sh/include/uapi/asm/
2015-04-06 11:27:40 4260
原创 javascript、ruby和C性能一瞥(2)
好吧,最后让我们用C来实现,看看再能榨取多少性能。注意我没有改变算法,C的算法和之前的3种都是基本相同的:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <math.h>#include <string.h>#include <time.h>#include <unistd.h>typedef unsig
2015-04-01 17:42:24 1646
原创 javascript、ruby和C性能一瞥(1)
测试一下本地js、浏览器中的js以及ruby对于类似算法的性能。结果有些意外:浏览器js最快,本地其次当相差很小;ruby最慢而且不是一个数量级的; 因为写的匆忙,可能有重大问题没能看出来,请各位高人不吝赐教。 代码均未作优化,我们依次来看: 首先是浏览器的:<!DOCTYPE html><html><head> <title>sieve suanfa</title> <s
2015-04-01 15:50:48 1344
SwiftUI 超酷炫动画示例大合集
2024-01-08
MacOS 和 iOS 内核 xnu 可编译源代码
2024-01-08
SwiftUI 示例 iFonts 应用完整项目源代码
2024-01-08
SwiftUI 各种界面、自定义视图、动画以及设计哲学示例合集
2024-01-08
SwiftUI 英雄动画(HeroAnimations)演示代码
2024-01-08
iOS 15.4 真机调试支持包(可支持最新的iOS 15.4.1系统)
2022-04-03
SwiftUI编程实现不同TabView标签页中任意导航层级视图之间相互跳转的演示代码
2022-04-03
unlocker_new
2008-11-10
UnlockerEx
2008-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人