NASM汇编学习系列——获取命令行参数
Posted whuwzp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NASM汇编学习系列——获取命令行参数相关的知识,希望对你有一定的参考价值。
说明
- 本学习系列代码几乎完全摘自:asmtutor.com,如果英文可以的(也可以用谷歌浏览器翻译看),可以直接看asmtutor.com上的教程
- 本学习系列目录地址:https://www.cnblogs.com/whuwzp/p/nasm_contents.html
- 系统环境搭建:(我用的是ubuntu18.04.4 server,安装gcc、g++)
sudo apt install nasm
sudo apt install gcc-multilib
0. 概览
- 承前:无
- 启后:本节,获取命令行参数。
1. 命令行参数传递约定
- 命令行参数都保存在栈上(和c语言的参数传递保持一致,参数在栈上)
- 命令行参数构成类似
main(int argc, char** argv)
:- 第一个参数:命令行参数的个数(包含exe名字这个参数)
- 第二个参数:exe自身的名字
- 第三个参数:输入的第一个参数
- 第四个参数:输入的第二个参数
- ...
2. 获取命令行参数
以下代码摘自:https://asmtutor.com/#lesson8
functions.asm
是之前的。
%include ‘functions.asm‘ ; 这个就是之前的
SECTION .text
global _start
_start:
pop ecx ; 弹出第一个参数到ecx,即参数个数
nextArg:
cmp ecx, 0h ; check to see if we have any arguments left
jz noMoreArgs ; if zero flag is set jump to noMoreArgs label (jumping over the end of the loop)
pop eax ; 弹出下一个参数到eax,然后打印
call sprintLF ; call our print with linefeed function
dec ecx ; 递减ecx,看看剩下的参数个数
jmp nextArg ; jump to nextArg label
noMoreArgs:
call quit
下面摘自https://asmtutor.com/#lesson8的测试结果:
~$ ./helloworld-args "This is one argument" "This is another" 101
./helloworld-args
This is one argument
This is another
101
以上是关于NASM汇编学习系列——获取命令行参数的主要内容,如果未能解决你的问题,请参考以下文章