当前位置:网站首页>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;
}
边栏推荐
- Code Audit - PHP
- The Coolest Kubernetes Network Solution Cilium Getting Started Tutorial
- [Structure internal power practice] Structure memory alignment (1)
- Luogu: P2574 XOR的艺术 [线段树]
- DataFrame insert row and column at specified position
- 行走社会100绝招
- NC20164 :最大数MAXNUMBER [线段树]
- Redis cache and existing problems--cache penetration, cache avalanche, cache breakdown and solutions
- 星座理想情人
- Xcode 12 ld: symbol(s) not found for architecture armv64
猜你喜欢
随机推荐
DTcloud 装饰器
使用HBuilder离线本地打包ipa教程
mySQL数据库初始化失败,有谁可以指导一下吗
Controller-----controller
Luogu P1966: [NOIP2013 提高组] 火柴排队 [树状数组+逆序对]
漂亮MM和普通MM的区别
8.4模拟赛总结
按钮上显示值的轮流切换
sql server收缩日志的作业和记录,失败就是因为和备份冲突了吗?
【LeetCode】623. 在二叉树中增加一行
ps怎么拼图,自学ps软件photoshop2022,PS制作拼图效果
原型&原型链
基因数据平台
复现一次循环和两次循环
【LeetCode】623. Add a row to the binary tree
How to make a puzzle in PS, self-study PS software photoshop2022, PS make a puzzle effect
Creo 9.0 基准特征:基准坐标系
ps怎么替换颜色,自学ps软件photoshop2022,ps一张图片的一种颜色全部替换成另外一种颜色
六年团队Leader实战秘诀|程序员最重要的八种软技能 - 脸皮薄容易耽误事 - 自我营销
Luogu P3368: 【模板】树状数组 2