目录
eax
寄存器:主要作用是用于存放函数的返回值,同时也用于存放一些临时数据和进行算术运算- int Function() {
- int result = 42;
- return result;
- }
eax
寄存器将会存放返回值 42
eip
寄存器,它存储了当前正在执行的指令的内存地址,也就是程序计数器。
- #include
- int main(int argc, char *argv[])
- {
- int i = 0;
- for(;i
- {
- printf("%d: %s\n",i,argv[i]);
- }
- return 0;
- }
argc
(argument count)表示传递给程序的命令行参数的数量(包括程序名称本身)argv
(argument vector)是一个指向指针数组的指针,其中每个指针指向一个包含命令行参数的字符串
(二)举例二
- #include
- #include
- int main(int argc, char* argv[])
- {
- if (argc != 4)
- {
- printf("Use error\nUsage: %s op[-add|sub|mul|div] d1 d2\n", argv[0]); //argv[0], 会不会不存在呢??
- return 1;
- }
- int x = atoi(argv[2]);
- int y = atoi(argv[3]);
- int result = 0;
- // 你的程序一定有4个命令行参数,第一个是程序名
- if (strcmp(argv[1], "-add") == 0)
- {
- result = x + y;
- printf("%d+%d=%d\n", x, y, result);
- }
- else if (strcmp(argv[1], "-sub") == 0)
- {
- result = x - y;
- printf("%d-%d=%d\n", x, y, result);
- }
- else if (strcmp(argv[1], "-mul") == 0)
- {
- result = x * y;
- printf("%d*%d=%d\n", x, y, result);
- }
- else if (strcmp(argv[1], "-div") == 0)
- {
- if (0 == y) printf("%d/%d=error! div zero\n", x, y);
- else printf("%d/%d=%d\n", x, y, x / y);
- }
- else
- {
- printf("Use error, you should use right command line\nUsage: %s op[-add|sub|mul|div] d1 d2\n", argv[0]); //argv[0], 会不会不存在呢??
- }
- return 0;
-
- }
四、环境变量
(一)基本概念
- 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
- 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
- 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
(二)常见环境变量
- PATH : 指定命令的搜索路径
- HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
- SHELL : 当前Shell,它的值通常是/bin/bash
(三)查看环境变量方法
echo $NAME //NAME:你的环境变量名称
(四)测试PATH
echo $PATH
(五)和环境变量相关的命令
- echo: 显示某个环境变量值
- export: 设置一个新的环境变量
- env: 显示所有环境变量
- unset: 清除环境变量
- set: 显示本地定义的shell变量和环境变量
1. env: 显示所有环境变量
2. export: 设置一个新的环境变量
export MYENV=hello_world//创建了一个名为 MYENV 的环境变量,并将其值设为 hello_world
3. echo: 显示某个环境变量值
(六)获取环境变量的三种方式
1. 通过系统调用获取或设置环境变量
- #include
- #include
- int main()
- {
- printf("%s\n",getenv("PATH"));
- return 0;
- }
2. 通过命令行第三个参数获取环境变量(env)
- #include
- #include
- int main(int argc, char*argv[], char *env[])
- {
- int i=0;
- for(;env[i];i++)
- {
- printf("env[%d]: %s: \n", i, env[i]);
- }
- return 0;
- }
3. 通过第三方变量environ获取
- libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明
- #include
- #include
- #include
//environ的头文件 - int main()
- {
- extern char **environ;
- int i=0;
- for(;environ[i];i++)
- {
- printf("%d: %s: \n", i, environ[i]);
- }
- return 0;
- }
(七)本地变量和环境变量
- 在Linux系统中,环境变量是在整个系统中可见的,并可以被子进程继承。这意味着子进程可以访问到父进程中的环境变量。
- 相比之下,本地变量只在当前进程(或作用域)中有效,子进程无法直接访问或继承这些本地变量。这是因为本地变量的作用域限定在特定的进程或脚本中。
- #include
- #include
//getenv的头文件 - int main()
- {
- printf("NEW_env: %s\n", getenv("NEW_env"));
- return 0;
- }