当前位置:网站首页>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;
}
边栏推荐
- 网页直接访问链接不让安全中心拦截
- 为什么我推荐使用智能化async?
- 吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第二节:神经网络基础(下)
- The Secrets of the Six-Year Team Leader | The Eight Most Important Soft Skills of Programmers
- sql server中 两表查询 平均数 分组
- What is a good movie to watch on Qixi Festival?Crawl movie ratings and save to csv file
- DPU — 功能特性 — 网络系统的硬件卸载
- 接口全周期的生产力利器Apifox
- 工程制图知识点
- egg框架中解决跨域的三种方案
猜你喜欢

只有一台交换机,如何实现主从自动切换之nqa

DataFrame insert row and column at specified position

“充钱”也难治快手的“亏亏亏”?

工程制图直线投影练习

吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第二节:神经网络基础(下)

How to make pictures clear in ps, self-study ps software photoshop2022, simple and fast use ps to make photos clearer and more textured

spark集群部署(第三弹)

IT研发/开发流程规范效能的思考总结

放大器OPA855的噪声计算实例

Xcode10的打包方式distribute app和启动项目报错以及Xcode 打包本地ipa包安装到手机上
随机推荐
Thinking after writing a code with a very high CPU usage
love is a sad song
动态内存开辟(C语言)
Undefined symbols for architecture arm64解决方案
ps怎么替换颜色,自学ps软件photoshop2022,ps一张图片的一种颜色全部替换成另外一种颜色
The Secrets of the Six-Year Team Leader | The Eight Most Important Soft Skills of Programmers
Why is pnpm hitting npm and yarn dimensionality reduction?
Detailed explanation of DNS query principle
控制器-----controller
Moonbeam团队发布针对整数截断漏洞的紧急安全修复
How to replace colors in ps, self-study ps software photoshop2022, replace one color of a picture in ps with another color
工程制图知识点
好资料汇总
mySQL数据库初始化失败,有谁可以指导一下吗
请问大佬们 ,使用 Flink SQL CDC 是不是做不到两个数据库的实时同步啊
egg framework
tensorflow.keras无法引入layers
Redis cache and existing problems--cache penetration, cache avalanche, cache breakdown and solutions
Dynamic memory development (C language)
MySQL database error The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)