分类: 编程语言

5 篇文章

懂点汇编
来源:http://www.ruanyifeng.com/blog     学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。     计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。 汇编语言不容易学习,就连简明扼要的介绍都很难找到。下面我尝试写一篇最好懂的汇编语言教程,解释 CPU 如何执行代码。     0x01 汇编语言是什么? 我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。   这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。   对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。   「汇编语言是二进制指令的文本形式」,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。   当然还有一类人才能够逆向还原,能够把汇编语言翻译成高级语言,是十分有技术含量的操作。     0x02 来历 最早的时候,编写程序就是手写二进制指令,然后通过各种开关输入计算机,比…
C/C++代码头注释规范
mark 下次用 /********************************************************************************* *Copyright(C),Your Company *FileName: // 文件名 *Author: //作者 *Version: //版本 *Date: //完成日期 *Description: //用于主要说明此程序文件完成的主要功能 //与其他模块或函数的接口、输出值、取值范围、 //含义及参数间的控制、顺序、独立及依赖关系 *Others: //其他内容说明 *Function List: //主要函数列表,每条记录应包含函数名及功能简要说明 1.………… 2.………… *History: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简介 1.Date: Author: Modification: 2.………… **********************************************************************************/ 参考: [1]. https://blog.csdn.net/fmxfmx2013/article/details/30999095?ydreferer=aHR0cHM6Ly9jbi5iaW5nLmNvbS8%3D
C语言 – 多个文件保存时的内存处理
/* 时间:2023/09/12 作者:马文杰 代码功能:存储文件之前,检查内存使用百分比,内存使用超过80%会自动删除最老旧的文件,以此来保证系统正常运行 函数名称: getLogUsePercentage / findMatchingFile / compareFileNames / delOldLogFile / main 历史: 日期:2023/09/21 作者:mawenjie 修改:函数delOldLogFile中有一处没有释放资源,是在combinedTime 申请资源失败时没有释放,文中已有记录标记。 */ #include <stdlib.h> #include <dirent.h> #include <stdio.h> #include <string.h> /* 函数功能: 获取系统指定路径下内存使用的百分比 */ int getLogUsePercentage() { int iUsePcent = -1; char line[512] = {0}; // 执行df命令并读取输出 FILE* pipe = popen("df /home/delphi/solo", "r"); if (pipe == NULL) { perror("Failed to execute df command"); exit(EXIT_FAILURE); } // 读取df命令的输出 while(fgets(line, sizeof(line), pipe)); printf("[+][%s:%d] line: %s\n",__FUNCTION__,__LINE__,…
汇编语言指令(机器码)解析
这是一条汇编指令:"0DAB:0106 89E8 MOV AX,BP", 那么16进制数字和机器码之间的转化关系是什么?后来发现机器码有不同的长度,不同长度又分别代表什么含义?通过机器码,如何知道一些信息呢,如:操作数和源操作数,参考一些文章来对比分析下 0x01 机器码分析 1.1 分析16/16位寄存器 1. 目的操作数不变,改变源操作数 逻辑地址 机器码 操作符 操作数 机器码 src dest 0DAB:0100 89C0 MOV AX,AX ;89C0 -> 100010001 11 000 000 0DAB:0102 89D8 MOV AX,BX ;89D8 -> 100010001 11 011 000 0DAB:0104 89D0 MOV AX,DX ;89D0 -> 100010001 11 010 000 0DAB:0106 89E8 MOV AX,BP ;89E8 -> 100010001 11 101 000 0DAB:0108 89F0 MOV AX,SI ;89F0 -> 100010001 11 110 000 0DAB:010A 89F8 MOV AX,DI ;89F8 -> 100010001 11 111 000 0DAB:010C 89E0 MOV AX,SP ;89E0 -> 100010001 11 100 000 0DAB:010E 89C8 MOV AX,CX ;89C8 -> 100010001 11 001 000 2. 源操作数不变,改变目的操作数 0DAB:0110 89C3 MOV BX,AX ;89C3 -> 100010001 11 000 011 0DAB:01…