当前位置:网站首页>Assembly language (8) x86 inline assembly
Assembly language (8) x86 inline assembly
2022-08-05 09:05:00 【Day-3】
1 One-line assembly
#include <stdio.h>
#include <stdlib.h>
int main()
{
int nNum = 0;
_asm mov nNum, 100
printf("%d\n", nNum);
system("pause");
return 0;
}
2 multi-line assembly
2.1 库函数
#include <stdio.h>
#include <stdlib.h>
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
mov nNum, 100
push nNum
mov eax, szFormat
push eax
call printf
add esp, 8
}
system("pause");
return 0;
}
2.2 自写函数
#include <stdio.h>
#include <stdlib.h>
int MyAdd(int a, int b)
{
return a + b;
}
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
push 1
push 2
call MyAdd
add esp, 8
mov esi,eax
push esi
mov eax, szFormat
push eax
call printf
add esp, 8
}
system("pause");
return 0;
}
3 The interaction of the custom function with the main function
使用esi可以,使用ecx就不行,Cause the custom function is initialized at the beginning of the run,改变了ecx的值.
#include <stdio.h>
#include <stdlib.h>
int MyAdd(int a, int b)
{
int nNum = 0;
_asm mov nNum, edx
if (nNum != 12313)
{
_asm jmp x1
}
else
{
_asm jmp esi
}
x1:
return a + b;
}
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
mov edx, 12313
mov esi, thisx
}
thisx:
system("pause");
return 0;
}
4 The stack implements the interaction between the main function and the custom function
#include <stdio.h>
#include <stdlib.h>
int MyAdd(int a, int b)
{
int nNum = 0;
_asm mov nNum, ebp - 4
if (nNum != 12313)
{
_asm jmp x1
}
else
{
_asm jmp ebp - 8
}
x1:
return a + b;
}
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
push 12313
push thisx
call MyAdd
}
thisx:
system("pause");
return 0;
}
5 数组遍历
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = {
1,2,3,4,5,3,3,1,1,1,0 };
char * szFormat = "%d\n";
_asm {
xor esi,esi
jmp lookX
lookM:
inc esi
lookX:
mov edi, [arr + esi * 4]
push edi
mov eax, szFormat
push eax
call printf
add esp, 8
cmp edi, 0
jne lookM //若不相等则跳转
}
system("pause");
return 0;
}
6 Iterates by the length of the array
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = {
0,1,2,3,4,5 };
char * szFormat = "%d\n";
_asm {
mov edi, 5h
xor esi,esi
jmp look1
look:
inc esi
look1:
push [arr + esi * 4]
mov eax, szFormat
push eax
call printf
add esp, 8
cmp esi, edi
jne look
}
system("pause");
return 0;
}
边栏推荐
- Controller-----controller
- php fails to write data to mysql
- mySQL数据库初始化失败,有谁可以指导一下吗
- XCODE12 在使用模拟器(SIMULATOR)时编译错误的解决方法
- The Coolest Kubernetes Network Solution Cilium Getting Started Tutorial
- 线程之Happens-before规则
- (转)[Json]net.sf.json 和org.json 的差别及用法
- 百行代码发射红心,程序员何愁命不中女朋友!
- Xcode 12 ld: symbol(s) not found for architecture armv64
- 微信小程序请求封装
猜你喜欢
随机推荐
512色色谱图
What is the connection and difference between software system testing and acceptance testing? Professional software testing solution recommendation
“充钱”也难治快手的“亏亏亏”?
Dynamic memory development (C language)
selectPage 动态改变参数方法
CVPR 2022 | 将X光图片用于垃圾分割,港中大(深圳)探索大规模智能垃圾分类
mySQL数据库初始化失败,有谁可以指导一下吗
原型&原型链
Detailed explanation of DNS query principle
【Excel实战】--图表联动demo_001
为什么我推荐使用智能化async?
flink cdc支持从oracle dg库同步吗
ps怎么拼图,自学ps软件photoshop2022,PS制作拼图效果
【LeetCode】623. 在二叉树中增加一行
16 kinds of fragrant rice recipes
JS语法使用
EA谈单机游戏:仍是产品组合中极其重要的部分
Three solutions to solve cross-domain in egg framework
openpyxl操作Excel文件
express hot-reload








