随笔分类 - Assembly languages
摘要:在Linux Kernel中有些constant需要被C code 跟 assembler共同使用在用constant的時候,不能單方面給0x1000UL因為assembler無法看這東西。但是C compiler卻可以。所以使用這個gcc feature.讓C compiler看到的constan...
阅读全文
摘要:1、CALL和RET/RETN是一对指令,CALL把返回地址压入堆栈,RET/RETN把返回地址从堆栈取出,然后将IP寄存器改为该返回地址。2、不使用CALL,而是人为地把地址放入堆栈即可实现。如:push ediretn从edi处开始执行3、加壳利用这个特点,在启动源文件文件前,将代码解密还原至原始位置
阅读全文
摘要:Linux汇编语法简介(GNU GAS)声明:本教程不是介绍汇编语言和CPU指令的书籍,只是对gas的用法做一简单介绍。市面上所有讲汇编的书都是在微软的环境下,使用的是Intel的语法格式,因此,本教程的目的是想给在Linux下学习汇编的初级用户提供一些帮助。(详细请参阅 GNU GAS 手册)本人也是初学者,在以后的不断学习中,此教程也会慢慢修改,使得更加完善,希望阅读者给予宝贵意见。谢谢!一、 通用语法指令格式: 操作码 源操作数, 目的操作数(在有两个操作数的情况下)。常量表示: 在常量前加上$,例:$1$的另一种用法:用于符号时,表示的是一个首地址。例:string:.ascii &q
阅读全文
摘要:Address operand syntaxThere are up to 4 parameters of an address operand that are presented in the syntaxdisplacement(base register, offset register, scalar multiplier). This is equivalent to[base register + displacement + offset register * scalar multiplier]in Intel syntax. Either or both of the nu
阅读全文
摘要:在淘宝定了> 后天才能到货。从网上下了>的电子书看看。找找C++的感觉先。先看看基本类型的传值方式:写了3个方法。反编译看看。void fun1(int a){ a ++;}void fun2(int &a){ a++;}void fun3(int *a){ (*a)++;}fun1的汇编代码:push ebpmov ebp, espmov eax, dword ptr ss:[ebp+8]add eax, 1mov dword ptr ss:[ebp+8], eaxpop ebpretnfun2的汇编代码:push ebpmov ebp, espmov eax, dwor
阅读全文
摘要:nasm来写可以写成mov eax,dword ptr [ebp + 8]理由:ebp和esp默认是ss段,所以根本不用显式说明。 eax,ebx,ecx,edx,edi,esi默认是ds段, eip默认是cs段。补充:上面给的是masm用法nasm是mov eax,dword [ebp + 8]我自己用的nasm,经常说nasm语法说习惯了。
阅读全文
摘要:;hello.asm[SECTION .text]global _start_start: jmp short ender starter: xor eax, eax ;clean up the registers xor ebx, ebx xor edx, edx xor ecx, ecx mov al, 4 ;syscall write mov bl, 1 ;stdout is 1 pop ecx ;get the address of the string from the stack mov dl, 5 ;length of the string int 0x80 xor eax, e
阅读全文
摘要:1 #include 2 void return_input(void) 3 { 4 char array[5]; 5 6 gets(array); 7 printf("%s\n", array); 8 } 9 main()10 {11 return_inpu...
阅读全文
摘要:1 #include 2 void function(int a,int b) 3 { 4 int array[5]; // total : 20 bytes. 5 } 6 7 main() 8 { 9 printf("this is where the return address poi...
阅读全文
摘要:gcc -g -o hello.exe hello.s // -g 加入訊息方便debuggdb 用法gdb -q hellobreak *main //亦可 b *mainrun //亦可print/x $eax //印出 16進位 的 register 內容print $eax //印出 10進位 的 register 內容print *(&array+1) //印出array[1]之值----dword : 4 bytes word : 2 bytesmov ax,BUFF #把BUFF(in memory) 的 value 放入ax register lea ax,BUFF #
阅读全文
摘要:學習軟體︰ GNU Assembly for Intel硬體平台︰ Intel作業平台︰ Linux、FreeBSD 和 Windows 的 MinGW 說明︰ 1.市面上的組合語言書籍大多以 MASM 為主,缺乏介紹 GNU Assembly 的書。 2.GNU Assembly 除了用在 Intel CPU上,也有其它知名 CPU 的版本,如 MIPS、SPARC等等。 GNU Assembly 更可用在「嵌入式系統」的 ARM 或 Intel CPU上。 3.GNU Assembly 和 GNU C++ 連結方式在 Windows ...
阅读全文
摘要:1 #Program Description: 2 #Author:Jeremy 3 #Creation Date:2012/9/25 10:21 4 #Revisions: 5 #Date: #Modified by: 6 7 #寫一個組合語言程式,輸一整數 n, 印出 其絕對值。 8 .section .data 9 msg: .asciz "請輸入一整數:"10 n: .int 011 ifmt:.asciz "%d"12 ofmt:.asciz "the abs value is %d"13 .section .text14
阅读全文