⑴ 谁能帮我把一个hex文件反编译为c语言文件
文件有两种,一种是文本文件,一种是程序二进制文件,不管哪种文件都可以用十六进制编码来显示,称为hex文件。
1、文本Hex文件一般不需要转成C语言,更多的是程序二进制文件,用十六进制显示,可以转换成C语言,一般使用相应的反汇编程序来实现,这方面的工具很多,不同的平台略有不同。Windows平台一般常用的OllyDbg、Windbg、IDA,Linux平台使用最多的是GDB和Linux版的IDA。
OllyDbg,简称OD,一般是软件逆向工程爱好者,最先使用的一个工具,但是因为当下不在更新,所以一般用一般用于学习使用,下图中左上角的区域即为反汇编区域 ,用户可以根据汇编指令,分析程序算法,然后自己编写代码。
通过这个实例 ,相信应该能理解一个大致的流程啦。
⑵ C语言怎么输出特殊字符^| <- ->上下左右字符
上下左右 通常 作 功能键 使用,例如 在 编辑器 (notepad, word 之类),用来移动光标一行或一格使用。
C语言 如果 想要输出 它们的键值,则需要 做点功课。
上下左右 是 双键值,(ESC, F1,F2,...F12 等等 也是 双键值),当用 getch() 读输入键时,要读2次,例如:
int key,key2;
key = getch(); //读第一次
printf("\nkey value = 0x%02x -- %d\n",key,key);
// 若是上下左右键
if (key == 0xe0) {
key2 = getch(); //读第2次
printf("\nkey value = %02x %02x-- %d %d\n",key,key2,key,key2);
};
上下左右键 键值 是 0xe048,0xe050,0xe04b, 0xe04d (与控制台设置有关,这是英文屏幕)
自己输出功能时 要做 键值比较,例如 if ( key==0xe0 && key2==0x4d) 光标右走多少距离。
^,| 是单键值,key = getch(); 读一次就有了。
⑶ C语言 答案使多少,为什么
编译输出为:-32
因为
“\x”为转义控制,代表八进制
char c 定义变量c 为字符型,占一个字节。
“e”的ASCII值为101,再加个0,即为1010。
而输出格式控制为%d,代表有符合的十进制数,占两个字节,即从变量c地址开始后的两个字节,二进制表示即为:1010 0000,最高位为符合位。
所以最后结果为-32。
⑷ C语言中字符串"\x81\x05\xE0\x5A\x47\x00\x01\x00"代表什么
确切地说,C语言中,"\x81\x05\xE0\x5A\x47\x00\x01\x00" 是一个用16进制ASCII码表示的字符串。这个字符串包含8个字符,每个字符都是用16进制来表示的,实际分配的空间是9个字节。
以下这两种表示方式实际上是等价的:
char xx[]="\x81\x05\xE0\x5A\x47\x00\x01\x00";
char xx[]={0x81,0x05,0xE0,0x5A,0x47,0x00,0x01,0x00,0x00};
注意,后面应该多一个0x00,因为第一种是字符串表达方式,编译器会自动增加结束符0.
⑸ c语言如何调用方向键
在C代码中可设置如下自编的intokey( )函数,用以接收方向键值。库函数kbhit( )是检测是否有按键被按下,库函数getch( )是读取键盘按键值的,不需按回车,也不回显。dir是代表方向的变量,根据不同的方向键值,让dir取1到4这四个不同的值。其它的程序段就可根据dir的值让东西朝某个方向移动。方向键按下后会产生2个值,第一个是224,另一个分别为上下左右的72、80、75、77,因此要读取2次值来判断。要包含#include<conio.h> .
void intokey( )
{ int flag;
if ( kbhit( ) ) //判断有键按下时才执行下面的操作
{ flag = getch( ); //用flag来获取键值
if (flag==224)
{ flag = getch( ); //值为224时表示按下了方向键,要再次获取才行
if (flag==72 && dir != 2) dir = 1; //方向键为“上”且原方向不为下时,让dir=1.
if (flag==80 && dir != 1) dir = 2; //方向键为“下”且原方向不为上时,让dir=2.
if (flag==75 && dir != 4) dir = 3; //方向键为“左”且原方向不为右时,让dir=3.
if (flag==77 && dir != 3) dir = 4; //方向键为“右”且原方向不为左时,让dir=4.
}
if (flag==13)
{ while( 1 ) if ( ( flag=getch( ) )==13 ) break ; }
}
}
注:这个函数来源于某些“贪吃蛇”的代码,略有修改,足可获取方向键值。其中的1、2、 3、4分别对应着上下左右。当flag获得键值后,分两种情况:一是flag=224,此时再次获取键值以判断输入的是4个方向中的哪一个;二是flag=13,表示按下回车键,我们就执行循环,程序暂停,等待再次输入回车,程序继续运行。
⑹ c语言int c;c='\xe0';printf("%d",c);要详细推算过程。
int c;//声明变量c为整形变量。
c='\xe0';//将字符常量 ‘\xe0'赋值给整形变量c,在此间,字符常量‘\xe0'会自动提升到整形常量0xFFFFFFE0
printf("%d",c);//输出 整形变量的十进制格式,即 -32
⑺ c语言怎样判断键盘按键的按下、释放
C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:
bitkeychk()//单一按键检测
{
if(P1.0==0)//如果键按下
{
delay();//延时去抖
if(P1.0==0)return(1);//返回键状态
}
return(0);
}
unsignedcharkbscan(void)//矩阵扫描按键检测
{
unsignedcharsccode,recode;
P1=0x0f;//发0扫描,列线输入
if((P2&0x0f)!=0x0f)//有键按下
{
delay(20);//延时去抖动
if((P1&0x0f)!=0x0f)
{
sccode=0xef;//逐行扫描初值
while((sccode&0x01)!=0)
{
P1=sccode;
if((P1&0x0f)!=0x0f)
{
recode=(P1&0x0f)|0xf0;
while((P1&0x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//无键按下,返回0
}
⑻ 有关C语言的
你所指的程序检测是什么,编译吗?编译没有错,链接有错很正常,一般情况是有些符号没找到。看看工程设置是不是有的库没有加进去。
⑼ c语言getch()函数
getch();并非标准C中的函数,不存在C语言中。!!
所在头文件:conio.h
建议换成getchar()之类的
getch()
getch():
所在头文件:conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
例如:
char ch;或int ch;
getch();或ch=getch();
用getch();会等待你按下任意键,再继续执行下面的语句;
用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
易错点:1.所在头文件是conio.h。而不是stdio.h。
2.在使用之前要调用initscr(),结束时要调用endwin()。否则会出现不输入字符这个函数
也会返回的情况。
getch();并非标准C中的函数,不存在C语言中。所以在使用的时候要注意程序的可移植性。国内C语言新手常常使用getch();来暂停程序且不知道此函数来源,建议使用getchar();(如果情况允许)代替此功能或更换一款编译器。