1、 leave : 相当于 mov esp, ebp 然后 pop ebp (Set esp to ebp, then pop ebp). 一般与enter 一起使用, 是80x86 CPU 下提供的一个内置工具指令, 主要用于实现堆栈帧建立。一般在调用例程 (enter) 时或退出例程时使用。
int add_a_and_b(int a, int b) {return a b;
}int main() {return add_a_and_b(2, 3);
}_add_a_and_b:push %ebxmov %eax, [%esp8] mov %ebx, [%esp12]add %eax, %ebx pop %ebx ret _main:push 3push 2call _add_a_and_b add %esp, 8ret首先我们看ca…
博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之…
色彩空间转换公式汇编XYZ —> RGB
ref_X 95.047 //Observer 2, Illuminant D65ref_Y 100.000ref_Z 108.883
var_X X / 100 //X From 0 to ref_Xvar_Y Y / 100 //Y From 0 to ref_Yvar_Z Z / 100 //Z From 0 to ref_Y
var_R var…
1. 基础 x86 的寄存器为32位,x64 的寄存器为64位。寄存器间对应关系: 64位寄存器 低32位 低16位 低8位
rax eax ax al
rbx ebx bx bl
rcx ecx cx cl
rdx edx dx dl
rsi esi si sil
rdi edi di dil
rbp ebp bp bpl
rsp esp…
Windows 汇编语言编程教程 Version 1.02 Copyright2005,Jeff Huang.All rights reserved Translator:fqh 2005.7.10 JEFF HUANG 作,fqh译 目录 介 绍 ……………………………………………………………………………2 为什么选用汇编语言 …………………………
1. 什么是OpCode? 转自老罗 Things have changed in the past two decades.-- Bill Gates(1995) 什么是OpCode?
不管计算机技术的发展如何日新月异,其最基本的东西是不会突然改变的。OpCode就是这其中的一样东西——因此,Bill G…
一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为: MOV DST,SRC执行的操作:(DST)&l…
头文件
#ifndef __HEAD_H__
#define __HEAD_H__
typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR;
}gpio_t;
#define PHY_LED1_ADDR 0X50006000
#define PHY_LED2_ADDR 0X50007000
#d…
黑客常用函数 C2008-12-29 21:07确定Windows和windows系统目录 有两个SDK函数可以完成该功能。GetWindowsDirectory和GetSystemDirectory,下例说明了如何使用这两个函数: TCHAR szDir [MAX_PATH]; //Get the full path of the windows directory. :: Get…
>_< ▊ Q1 :从键盘输入一个字符并在屏幕上显示,给出其ASCII二进制表达式及其包含的1的个
数,如果是“Esc”,那么退出程序。重复上述过程。
参考效果: ▽ 我的解法
DATA SEGMENTBUF DB Please input a charact…
“服务”在形式上是用一组原语来描述的,这些原语供用户实体访问该服务或向用户实体报 某事件的发生。服务原语可以划分为如表1 - 3所示的4类。 服务原语 原 语 意 义 请求(R e q u e s t) 用户实体要求服务做某项工作 指示(I n d …
csapp 第五章读书笔记
Optimizing Program Performance
数据结构和算法compiler 优化: eliminating unnecessary function calls, conditional tests, and memory references, instruction-level parallelism,parallelism
Capabilities and Limitations of Optimizing Compi…
#include <stdio.h>
int f(int a, int b, int c) { return a * b c; }
int main() { printf("%d\n", f(1, 2, 3)); // 5 return 0; }
#if 0
调用方(caller)函数通过栈向被调用方(callee)函数传递参数。
/* * x86 */ /* * x64 */ …
一、实验目的 学习子程序的结构、特点,以及子程序的设计和调试方法
二、实验内容
1、从字符串中删除一个字符,并存储到寄存器AX中。 代码及注释:
data segmentstring db exas ;字符串内容leng dw $-string ; 字符串长度key db x …
DB 定义的变量为字节型 Define Byte DW 定义的变量为字类型(双字节)Define Word DD 定义的变量为双字型(4字节)Define Double Word DQ 定义的变量为4字型(8字节)Define Quadra Word DT 定义的变量为10字节型…
——Dont believe in magic !Understand what your program do ,how they do . 引言 昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象: view sourceprint?01#include &…
本文翻译自:Guide to x86 Assembly
在阅读 Linux 源码之前,我们需要有一些 x86 汇编知识。本指南描述了 32 位 x86 汇编语言编程的基础知识,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻…
程序1
使用 VC6.0 编译如下程序(使用 VC6.0 的原因是该编译器不会对代码进行过多的优化,因此适合逆向入门)
// 01.cpp : Defines the entry point for the console application.
//
# include "stdafx.h"int main(int argc, char…
chap4的练习4.4(page.255)让用Y86-64实现rsum(递归求数组元素之和),提示为:先得到x86-64汇编代码,然后转换成Y86-64的
这是rsum的c实现:
long rsum(long *start, long count)
{if …
【我所认知的BIOS】->反汇编BIOS之Bootblock(4)
--initialize Super IO
By Lightseed
5/13/2010
一、BIOS的主流程
到目前为止,我们已经看了两个重要的函数了,也是BIOS的必经之路。如下面的代码片段,BT_CPU_Init和Chipset_Reg_Init_E…
汇编器的分类(the category of the assembler)
1、MASM(Microsoft Assembler)masm 6.0 是免费的。微软现在不再发行masm,此功能已经集成在visual studio 中。
2、MASM32是由Steve Hutchessen开发的。集成了masm原有功能和win32 API。
3、NASM…
复习
Lui指令 Lui a5,0x200>Lui a5,0x00200,补成20位 Lui a5,0x200表示将0x200这个值加载到a5寄存器的高20位中。但0x200只是一个12位的数值。为了将其展开为20位的形式,我们需要在它的前面补足相应数量的零。
所以,并不是200左移三位之…
【我所認知的BIOS】—>Decompression补充
By LightSeed
2009-6-4
这篇文章主要是对上一篇文章Decompression的补充,上一篇文章一是考虑到篇幅,二是考虑到还没有谈到反汇编BIOS二进制文件,所以没有讲的很详细。在这篇文章中举个BIOS的例…
【我所认知的BIOS】->反汇编BIOS之Bootblock(5)
--Store CPU type to CMOS
By Lightseed
5/18/2010
一、BIOS的主流程
从这章开始,我在每章的开头说把目前BIOS的主流程进行到了哪一步放在最前面,这样有助于理解整个Award BIOS的流程。
到目前为…
.assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 1.entrypointldstr "I am from the IL Assembly Language..."call void [mscorlib]System.Console::WriteLine (string)ret}
这是MSIL…
【我所认知的BIOS】->反汇编BIOS之Bootblock(3)
--initialize some chipset register
By Lightseed
5/13/2010
在上一篇中,我和大家探讨了下面代码中的BT_CPU_Init这个函数,它主要是一些特殊CPU的micro code的update。那么我们继续往下走…
extern "C" void fun(int a, int b) {int x a;int y b;int z x y;return;}int main() {fun(5, 10);return 0;}对于这样的一个C函数的调用过程,我们可以用下面的汇编代码来描述:
1.前提8086CPU中,bsp用来保存栈的指针,esp用来保…
引子 由于这些日子一直都在研究底层的技术,从 Windows 驱动程序,到 Windows 内核等等技术的学习, 让我对底层的技术越发有兴趣了,而刚好,在研究 WRK 时, 对内存管理,寄存器,地址总线…
objdump命令的使用 objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: objdump -f test
显示test的文件头信息 objdump -d test
反汇编test中的需要执行指令的那些sec…
许多Visual C的使用者都碰到过LNK2005 :symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所…
文章目录 参考环境DOSBox-XWOWWindows On Windows 产生的原因Windows On Windows 的工作原理WOW16 的结束与 WOW64 的未来 在现代操作系统中运行 16 位应用程序DOSBox-X 16 位汇编环境的搭建应用准备挂载自动挂载dosbox-x.conf配置工具 参考
项目描述搜索引擎Bing、GoogleAI 大…
浮点数据转换指令包括不同的浮点精度数之间的转换,还包括整型和浮点数之间的转化。
在了解数据转换指令前,必须学习 IEEE 754 定义的五种舍入规则。前两条规则舍入到最接近的值,其他的称为定向舍入:
舍入到最接近的值 Round to nearest, ties to even – rounds to the n…
目录
1、问题描述
2、安卓app发生崩溃,需要查看汇编代码上下文去辅助分析
3、使用IDA打开.so动态库文件,提示Relocations for this machine are not implemented
4、IDA版本较老,不支持ARM64的指令集,使用7.0版本就可以了
5、…
源文件exitTest.s内容如下:
# This is the first program
.global _start
.section .text
_start:movq $60,%raxmovq $9,%rdisyscall源文件里边放的就是源代码,而我这里源代码是使用汇编语言写的,都是一些人类都可以阅读的字符。之后需要经过…
(You can submit many times. Your grade will be the grade of your last submission, prior to the deadline). Minimum Submission Requirements ● You will be submitting the following files: ○ part_a.dig ○ part_a.txt ○ part_b.dig ○ part_b.txt ○…
当我写了如下汇编时
; nasm -f elf64 -g -F dwarf charsin.asm
; gcc charsin.o -no-pie -o charsin
; ld -o eatclib eatclib.o
; gdb eatclib[SECTION .data]SPrompt db Enter string data, followed by Enter: ,0IPrompt db Enter an integer value, followed by Enter: ,1…
动手点关注干货不迷路前言我们知道 Go 语言的三位领导者中有两位来自 Plan 9 项目,这直接导致了 Go 语言的汇编采用了比较有个性的 Plan 9 风格。不过,我们不能因咽废食而放弃无所不能的汇编。1、 Go 汇编基础知识1.1、通用寄存器不同体系结构的 CPU&…
1.为什么学习汇编? 我们在进行嵌入式 Linux 开发的时候是绝对要掌握基本的 ARM 汇编,因为 Cortex-A 芯片一 上电 SP 指针还没初始化, C 环境还没准备好,所以肯定不能运行 C 代码,必须先用汇编语言设置好 C 环境…
一. Linux启动流程 看完 Linux 内核的顶层 Makefile 以后再来看 Linux 内核的大致启动流程, Linux 内核的启 动流程要比 uboot 复杂的多,涉及到的内容也更多。 本文中,我们就大致的了解一下 Linux 内 核的启动流程。 要分析 Li…
题目1: 编写程序,输出1~1000之间所有能被4整除,但是不能被5整除的数 具体操作:
for i in range(1,1000): #循环遍历1~999,因为range是左闭右开if (i % 4 0) and (i % 5 ! 0) :print(i) 结果展示: 题目2&…
EFI/UEFI BIOS 入门 : All For Beginners 写在前面 我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个个人计算机之中所处的地位如何.事实上,BIOS是…
预备 #include <stdio.h>int addDetail(int a, int b)
{return a b;
}int add(int a, int b)
{int c;c addDetail(a, b);return c;
}int main(int argc, char *argv[])
{int sum;sum add(3, 5);printf("sum %d\n", sum);return 0;
}汇编
main add addDeta…
caspp chapter 3
寄存器 operand form data movement instructions mov 指令例子: 0扩展 movz 指令: Zero-extending data movement instructions是一种计算机指令类型,涉及将数据从一个位置移动到另一个位置,同时通过在最重要的一端添加零位来将数据扩…
General Principles of Pipelining
Computational Pipelines circuit delays in units of picoseconds (abbreviated “ps”), or 10−12 seconds.
throughput in units of giga-instructions per second (abbreviated GIPS), or billions of instructions per second.
A …
csapp 第四章读书笔记 part3
Pipeline Control Logic
Desired Handling of Special Control Cases
ret 使用了3个bubble, ret 在write-back 阶段后确定下一条指令。 对于jump指令,需要到execute 阶段后,才能确认是否存在mispredicted bra…
本文简单描述一下wince5.0内核的启动流程,以mips cpu为例。msdn有一篇文章叫做Microsoft Windows CE 5.0 Board support Package,Boot Loader,and Kernel Startup Sequence非常不错,可以参考。
1. startup.首先,内核最先执行的代码位于oal当…
下面是来自alert7 前辈博客http://hi.baidu.com/weiwang_blog/blog/item/ee4704decce0ba5cccbf1ad1.html 的一道破解题: “The following binary code executes and gives correct results only whenthe Key_file is present in the same directory as the code. Your goal is…
文章目录 Format String格式化字符串函数格式化字符串参数原理 这几天学的少,过完年就一直在走亲戚(现在看到肉就犯恶心
Format String
格式化字符串函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之…
mov move
mvn Mov Negative ldr LoaD Register
str Store Register lsl Logic Shift Left
lsr Logic Shift Right asr Arithmetic Shift Right 算数右移
ror Rotate right 循环右移…
文章目录 寄存器指令使用技巧翻译C/Cif/else语句switch语句for循环while 循环do...while循环一维数组定义与使用二维数组定义与使用例 :哈密顿回路 注意立即数被符号位扩展 参考链接 寄存器
NameReg. NumUsage z e r o zero zero0constant value 0(恒为0) a t at a…
What is DOS?
DOS (see Wikipedia:DOS) is short for "Disk Operating System". It mainly refers to the series of operating systems that dominated the IBM PC compatible market from the 1980s and into the 1990s. But it may also refer to the DOS-bas…
汇编语言
1. mov操作
1.1 mov移动值
mov指令把右边的值移动到左边
mount c d:masm
c:
debug
r ax
0034
r 073f:0100
mov ax,7t1.2 mov移动寄存器的值
把右边寄存器的值赋值给左边的寄存器
a 073f:0105
mov bx,axt1.3 mov高八位(high)和低八位&am…
一 汇编中常见的数据类型
C 字符
H 半字
F 全字
D 双字
X 十六进制数
B 二进制数
P 压缩十进制数
Z 非压缩十进制数AREA DS CL4
AREA2 DS 4CL1CL4是一个很常见的定义 类似的还有PL5,XL6
第一个定义保留4 个字节的区域,并将该区域的首地址赋予AREA…
8. arc
上面一托混淆,左边似乎是三个东西相乘 单独取出最左边一托打印,可以得到大数组 接下来要解密,原代码非常混乱,我们先整理一下,简单去混淆 print
(all([[data][a][d] e for a, b in enumerate([[int(a) for a …
阅读本文需要C编程基础以及汇编知识,废话不多说,进入正文
// StackOverFloat.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include &q…
该文档主要是将以下两篇文档的内容copy到了一起:(1)"利用异常表处理 Linux 内核态缺页异常"http://www-128.ibm.com/developerworks/cn/linux/kernel/l-page/index.html;(2)"对用户/内核空间数据复制的实现和自己的理解"www.linuxfo…
【我所認知的BIOS】—>The Big Real Mode
LightSeed
2009-6-23
前面两篇,我们对实模式和保护模式做了比较详细地探讨,说了那么多其实都是为这篇文章服务的。因为在BIOS POST的过程中经常要用到1M以上的内存。但是BIOS本身的code却又都是在实…
C
C Primer
语言基础学习
C Templates The Complete Guide (2nd Edition)
学习模板,更好的阅读 STL 源码,毕竟C 标准库大部分是模板。
The C Standard Library
全称
The C Standard Library
A Tutorial and Reference
Second Edition简单的了解标…
本文以一个简单的程序为例,通过汇编代码查看函数调用过程,涉及如何开辟栈帧,函数如何返回等
#include <iostream>
using namespace std;int sum(int a, int b)
{int temp 0;temp a b;return temp;
}int main()
{int a 10;int b 2…
GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析 一、GCC简介: The GNU Compiler Collection,通常简称GCC,是一套由GNU开发的编译器集,为什么是编辑器集而不是编译器呢?那是因为它不仅支持C语言编译,还支持C, Ada, Ob…
#include<iostream>int sum(int a, int b)
{int tmp 0;tmp a b;return tmp;
}int main()
{int a 10;int b 20;int ret sum(a, b);std::cout << ret << std::endl;return 0;
}
main函数调用sum函数,sum函数执行完以后,怎么知道回…
数学游戏 题目描述 Kri 喜欢玩数字游戏。 一天,他在草稿纸上写下了 ttt 对正整数 (x,y)(x,y)(x,y),并对于每一对正整数计算出了 zxygcd(x,y)z x \times y \times \gcd(x,y)zxygcd(x,y)。 可是调皮的 Zay 找到了 Kri 的草稿纸,并把每一组的…
#include <stdio.h>
const char *f(int a) { return a 10 ? "it is ten":"it is not ten"; }
void main() {} #if 0
/* * x86 */ 早期无优化功能的编译器,在碰到编译含有运算符的语句时会以"if/else"语句的方法…
#include <stdio.h>
int f1(int a) { return a * 7; }
int f2(int a) { return a * 28; }
int f3(int a) { return a * 17; }
void main() {}
#if 0
*7,*17,乘法运算仍然可以用非乘法运算指令配合位移指令实现。
ecx a eax ecx * 8 eax eax - ecx …
文章目录 随笔Bug1、masm编译报错:Illegal use of register2、debug中使用段前缀3、[idata]在编译器中的处理4、push立即数报错5、报错:improper operand type6、程序莫名跳转到未知位置 (doing)7、DOSBox失去响应8、程序运行显示乱码9、程序运行导致DOS…
文章目录 参考gcc 内部的宏定义代码汇编调用在 SEI CERT C Coding Standard 这个标准里示例实例宏里的使用 参考
https://git.sr.ht/~gregkh/presentation-security/blob/3547183843399d693c35b502cf4a313e256d0dd8/security-stuff.pdf
gcc 内部的宏定义
宏定义:…
一、前言
IDA Pro(Interactive Disassembler Professional)简称“IDA”,是Hex-Rays公司出品的一款交互式反汇编工具,是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器。ID…
汇编程序调用 C 程序详情
在 C 程序和 ARM 汇编程序之间相互调用时必须遵守 ATPCS 规则,其是基于 ARM 指令集和 THUMB 指令集过程调用的规范,规定了调用函数如何传递参数,被调用函数如何获取参数,以何种方式传递函数返回值。 寄存…
实时数据库测试-汇编小程序。
hd.asm
.686
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
…
查看保护 查看ida 先放exp
完整exp:
from pwn import*
from sympy.ntheory.modular import crt
context(log_leveldebug,archamd64)while True:pprocess(./leak)ps[101,103,107,109,113,127]p.sendafter(bsecret\n,bytes(ps))cs[0]*6for i in range(6):cs[i]u32(p…
/*led_asm_c.c*/ #define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control #define rGPFDAT (*(volatile unsigned *)0x56000054) //Port F data #define rGPFUP (*(volatile unsigned *)0x56000058) //Pull-up control F //GPFCON 8口的 extern int …
实验名称:实验三 串操作指令
二、实验内容:
在数据段定义缓冲区,从键盘接收两串字符到两个缓冲区,将第二串中与第一串字符不一致的字符显示在屏幕。
实验过程:
源代码:
data segmentmess1 db 16,?,16…
用汇编进行字符串匹配 2、试编写一程序,要求比较两个字符串 STRING1 和 STRING2 所含字符是否完全相同,若相同则显示 MATCH,若不相同则显示 NO MATCH。
.model small
.dataSTRING1 db hello world!,0STRING2 db hello china!,0matchString d…
在Visual Studio 2015中搭建汇编环境可以通过安装Visual C++ (VC++) 和 Microsoft Macro Assembler (MASM) 来实现。Visual Studio 默认不直接支持汇编语言的开发,但你可以通过配置外部工具或使用内联汇编来编写汇编代码。
以下是使用Visual Studio 2015进行汇编语言开发的基…
文章目录 ARM RET 与 ERETARMv8 ERET 指令RET 与 ERET 的区别 ARM RET 与 ERET
在 ARMv8 架构中,RET 指令用于从函数或者过程返回。它主要负责从当前过程跳转回调用者,并恢复调用者的程序计数器 (PC) 的值。
语法:
RET {Xn} Xn 是一个可选…