LinuxC学习之简单C循环看汇编

本节linux指令笔记
将程序运行结果导出到指定文件中./a.out > /dev/null  &   。。。。
转化成后台运行的进程得到[1]XXXXX    
进程IDps aux | grep a.out   查看进程
kill (进程ID)   杀死进程磁盘上的程序—剧本内存中的进程
在Linux下,由一段简单的循环C语言程序学习两个简单的汇编指令:com与Jump;
void main()
{
	int counter ;
	printf("count your fngers!\n");

	counter=0;
	while(counter<10)
	{ counter++;
		printf("counter = %d\n",counter);
	}
}</span>


使用命令生成的反汇编文件(机器指令和汇编语言)—从main地址开始的汇编

000000000040057d <main>:
  40057d:       55                      push   %rbp
  40057e:       48 89 e5                mov    %rsp,%rbp
  400581:       48 83 ec 10             sub    $0x10,%rsp
  400585:       bf 44 06 40 00          mov    $0x400644,%edi
  40058a:       e8 c1 fe ff ff          callq  400450 <puts@plt>
  40058f:       c7 45 fc 00 00 00 00    movl   $0x0,-0x4(%rbp)
  400596:       eb 18                   jmp    4005b0 <main+0x33>
  400598:       83 45 fc 01             addl   $0x1,-0x4(%rbp)
  40059c:       8b 45 fc                mov    -0x4(%rbp),%eax
  40059f:       89 c6                   mov    %eax,%esi
  4005a1:       bf 57 06 40 00          mov    $0x400657,%edi
  4005a6:       b8 00 00 00 00          mov    $0x0,%eax
  4005ab:       e8 b0 fe ff ff          callq  400460 <printf@plt>
  4005b0:       83 7d fc 09             cmpl   $0x9,-0x4(%rbp)<span style="white-space:pre">	</span>      //比较指令
  4005b4:       7e e2                   jle    400598 <main+0x1b>     //跳转指令(相对地址的相对跳转)
  4005b6:       c9                      leaveq 
  4005b7:       c3                      retq
  4005b8:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  4005bf:       00

改动循环为死循环以理解线程:

#include<stdio.h>

void main()
{
	int counter ;
	printf("count your fngers!\n");

	counter=0;
	while(1)
	{
		counter++;
		printf("counter = %d\n",counter);
	}
}

指令查看和操作线程:

root@lanwei-K45VM:/home/study/lesson3# ./a.out >/dev/null &  //将程序转为后台运行(跑起了一个线程)
[1] 4174<span style="white-space:pre">						</span>     //线程ID
root@lanwei-K45VM:/home/study/lesson3# ps aux | grep a.out   //查看当前线程
lanwei    4094  0.0  0.0  33752  1916 pts/23   S+   22:14   0:00 vi a.out.list
root      4174  100  0.0   4196   356 pts/5    R    22:23   1:23 ./a.out
root      4192  0.0  0.0  15956   928 pts/5    S+   22:24   0:00 grep --color=auto a.out
root@lanwei-K45VM:/home/study/lesson3# kill 4094<span style="white-space:pre">	</span>     //尝试杀死4094线程
root@lanwei-K45VM:/home/study/lesson3#  ps aux | grep a.out  //查看确认
root      4174  100  0.0   4196   356 pts/5    R    22:23   2:06 ./a.out
root      4197  0.0  0.0  15956   928 pts/5    S+   22:25   0:00 grep --color=auto a.out
root@lanwei-K45VM:/home/study/lesson3# kill 4174
root@lanwei-K45VM:/home/study/lesson3#  ps aux | grep a.out
root      4199  0.0  0.0  15956   928 pts/5    S+   22:25   0:00 grep --color=auto a.out
[1]+  已终止               ./a.out > /dev/null
root@lanwei-K45VM:/home/study/lesson3# 


通过本次学习,初步理解了程序和线程的关系,磁盘中的程序就好比一个剧本,内存中线程则好比一场照着剧本进行的演出,关系简洁明了!同时学习了料条汇编指令:比较和跳转,这让从未接触过汇编的我感觉到在LinuxC的学习过程中,不仅要打好C编程的基础,更要学会看懂汇编语言,了解操作系统的运行原理,嵌入式LinuxC的学习之路,还很漫长!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值