C语言
文章平均质量分 93
C语言基础知识,从汇编角度看C
p0inter
生而自由,爱而无畏,保持热爱奔赴山海
展开
-
C语言多维数组
如果某个数组的维数超过1,它就被称为多维数组,例如,下面这个声明:int matrix[6][10]创建了一个包含60个元素的矩阵。但是,它是6行每行10个元素,还是10行每行6个元素?为了回答这个问题...原创 2022-04-28 20:21:21 · 2145 阅读 · 0 评论 -
C和汇编---sizeof运算符和strlen函数
sizeofsizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。程序:#include <stdio.h>int main(void){ int a=8; int b = sizeof(a); //printf("a占用字节=%u\n",sizeof(a)); printf("a占用字节=%d\n",b); return 0;}反汇编:5:...原创 2020-03-26 21:43:16 · 1240 阅读 · 0 评论 -
结构和其他数据形式
0x01 结构声明结构声明(structure declaration)描述了一个结构的组织布局。struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value;};该声明描述了一个由两个字符数组和一个float类型变量组成的结构。该声明并未创建实际的数据对象,只描述了该对象由什么组成。struct,它表明跟...原创 2020-03-17 18:44:09 · 152 阅读 · 0 评论 -
C和汇编----存储类别、链接和内存管理
0x01 存储类别1、作用域一个C变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域。1.1 块作用域:块是用一对花括号括起来的代码区域。比如函数体就是一个块。定义在块中的变量具有块作用域,块作用域变量的可见范围是从定义处到包含该定义的块的末尾1.2 函数作用域仅用于goto语句的标签。一个标签首次出现在函数的内层块中,它的作用域也延伸至整个函数1.3 函数原型作用域...原创 2020-03-13 18:50:16 · 178 阅读 · 0 评论 -
C和汇编----字符串
字符串是以空字符(\0)结尾的char类型数组。原创 2020-03-08 22:42:37 · 258 阅读 · 0 评论 -
C和汇编---数组
0x01 初始化数组1、没有初始化数组#include "stdio.h"int main(void){ int data[4]; for (int i=0;i<4;i++) { printf("%d\t",data[i]); } return 0;}不同系统,输出结果可能不一样:反汇编:4: int data[4];5: ...原创 2020-03-02 23:00:03 · 451 阅读 · 0 评论 -
c和汇编---函数
环境:VC++作用:函数是完成特定任务的独立程序代码单元1、创建和使用函数函数原型:声明函数是什么类型,指明函数的返回值和函数接收的参数类型,函数和变量一样,有多种类型,任何程序在使用函数之前都要声明该函数的类型函数调用:表明在此处执行函数,执行到函数调用的语句时,程序会找到该函数的定义并执行其中的内容,执行完返回调用函数继续执行下一行函数定义:详细说明函数要干啥#include...原创 2020-02-24 16:02:15 · 210 阅读 · 0 评论 -
C和汇编混合编程---do while
环境:VC++do while 会先执行do里面的循环体,执行完去执行while的条件判断,如果为真,继续执行do里面的循环体,如果为假,则结束循环C程序:#include "stdio.h"int main(){ int i=1,sum=0; do{ sum+=i; i++; }while(i<=100); printf("sum=%d\n",sum); ret...原创 2020-02-22 21:10:51 · 210 阅读 · 0 评论 -
C和汇编---while反汇编
环境:VC++C程序:#include "stdio.h"int main(){ int i=1,sum=0; while(i<=100){ sum+=i; i++; } printf("%d\n",sum); return 0;}用while计算1到100的值,功能很简单,让我们看看反汇编首先在main函数的入口,看到一条汇编不懂意思0040101C ...原创 2020-02-22 13:54:03 · 396 阅读 · 0 评论 -
C和汇编混合编程----实现浮点数的加减乘除
加法C程序:#include "stdio.h"int main(){ float a=1.0; float b=2.34; float c; c=a+b; printf("c=%f",c); return 0;}反汇编之后,实现加法的关键程序5: float a=1.0;00401028 C7 45 FC 00 00 80 3F mov ...原创 2020-02-11 21:56:49 · 1820 阅读 · 0 评论 -
c和汇编混合编程----main的反汇编
想看一下main函数的反汇编程序,分析一下:int main(){ return 0;} 反汇编:1: int main()2: {00401010 55 push ebp ;将ebp压入栈00401011 8B EC mov ebp,esp ;把esp赋值给ebp...原创 2020-02-08 22:50:29 · 192 阅读 · 0 评论 -
C和汇编混合编程----printf
今天终于用c和汇编成功调试出第一个程序了,程序很简单,我太菜了,花了几天的时间,才调试好,来记录一下,以防忘记了先上程序:#include "stdio.h"int main(){ char *str="begin\n";// printf("begin\n"); __asm{ push str ;将str的值就是字符串begin首地址压入栈 call printf ;调...原创 2020-02-08 22:24:29 · 467 阅读 · 0 评论 -
使用C和汇编实现一个加法操作
在C/C++嵌入汇编指令格式:__asm{ ;汇编指令}代码:#include "stdio.h"int main(){ int a=1; int b=2; int c=0; __asm{ mov eax,a mov ebx,b add eax,ebx mov c,eax } printf("a+b=%d\n",c); return 0;}结...原创 2020-02-07 13:03:35 · 1044 阅读 · 0 评论 -
C和汇编-----for循环
环境:VC++for循环有三个表达式,第一个表达式是初始化,在for循环之前执行一次,后面就不执行了,第二个是循环条件,在执行循环体之前求值,如果为真,执行循环体,如果为假,循环结束,第三个是执行更新,在每次执行完循环体后执行。下面用个简单的程序来研究for循环的反汇编#include "stdio.h"int main(){ int sum=0; for(int i=1;i<...原创 2020-02-22 20:39:25 · 1360 阅读 · 0 评论