导航:首页 > 源码编译 > 怎么看编译器的代码

怎么看编译器的代码

发布时间:2022-12-20 05:27:17

❶ 怎么才能看懂逆向代码

程序都是以函数为一个单位。函数内的多条代码使函数完成了特定的功能,在分析当中也是以一个函数作为一个分析单位。在分析时,应当尽可能多的分析出这个函数所完成的具体功能。
反汇编中的函数一般都有如下格式:
1.1 第一种函数格式
push ebp
mov esp,ebp
....
pop ebp
ret
1.2 第二种函数格式
这种函数没有特定的格式,但可以肯定是在函数的末尾肯定有ret语句。
2、识别函数的返回值,形参,局部变量
函数一般是使用eax寄存器来保存返回值。但是一些编译器可能用其他的方式来传递返回值,因此,在分析程序的前期,需要确定该程序是用什么编译器进行编译的(通过PEId可以产看),才能确定其返回值是用什么方式进行传递的。
函数的形参个数可以通过函数平衡多少字节的栈空间来推理出。因为存在着许多的传参方式,所以这种方法并不是绝对正确的,因此要先观察出一个函数的传参方式是何种方式。
和函数的传参方式息息相关的函数调用方式:
不同的调用方式平衡堆栈的方式是不同的。C方式调用时,是调用者进行堆栈平衡。传参时,一般是自右往左将实参入栈。在32位下实参一般是4个字节一个,但也有例外的情况(比如传递一个结构体变量)。
在平衡堆栈时,一般是在函数调用语句后由调用者平衡堆栈。
例如:
call fun ; 调用一个函数
add esp , 4 ; 平衡堆栈.
stdCall 是被调用自己平衡
stdCall方式调用时, 形参入栈的方式和 C方式相同, 不同就在于平衡堆栈的形式. std方式调用是由被调用的函数自己本身来平衡堆栈也就是在函数返回的时候平衡堆栈.
ret 0x4 // stdCall平衡堆栈的实例
如果函数传入形参每个都是 4个字节的, 那么就可以算出有多少个形参公式就是 :
形参个数 = 平衡堆栈用到的字节数 / 4
函数形参在汇编语言中随着调用方式不同其表现形式也跟着不同.
C方式和 std方式调用时,形参的表现形式为: [ebp+8] ,即 ebp+一个数字去索引.

❷ 如何查看C语言,内库的源代码

1、首先标准只是规定了这些函数的接口和具体的运行效率的要求,这些函数具体是怎么写得要看各个编译器的实现和平台。
2、例如使用的编译器是visual studio,微软提供了一部分C运行时(CRT)的源码,里面会有memcpy,strcpy之类的函数的实现,在visual studio 2005下的路径是C:\Program Files\Microsoft Visual Studio 8\VC\crt\src。

❸ 怎么查看编译器版本

你的是什么编译程序?
MYTC?
TC?
GCC?
GPP?
....

在VISUAL STUDIO命令提示里输入

RC /?

第一行

Microsoft (R) Windows (R) Resource Compiler Version 5.2.3690.0

5.2.3690.0就是版本号了

❹ 如何通过STVD编译器看自己的代码量

下载一个小工具

1、把解开后的size.exe复制到COSMIC\CXSTM8文件夹,就是你的COSMIC编译工具里有cpstm8.exe的那个文件夹。
2、在SVTD的Project->settings中打开Post-Build选项卡,在commands的最后一行加入:size $(OutputPath)$(TargetSName).map
3、保存返回,编译试试,最后会出现如:Program Size: Code=12470 Eeprom=0 ZeroPage=227 Ram=180的结果。

思路:

打开map文件,统计各段的长度,然后输出。

主要代码:
static void Main(string[] args)

{

StreamReader sr = new StreamReader(args[0]);

string[] s;

char[] charSeparators = new char[] { ' ' };

int code_size = 0;

int zeropage_size = 0;

int ram_size = 0;

int eeprom_size = 0;

for (int i = 0; i < 8; i++)

{

string s1 = sr.ReadLine();

}

while (true)

{

string s1 = sr.ReadLine();

s = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);

if(s.Length == 0)

{

break;

}

else if (s[7] == ".text" || s[7] == ".const" || s[7] == ".init")

{

code_size += int.Parse(s[5]);

}

else if (s[7] == ".eeprom")

{

eeprom_size += int.Parse(s[5]);

}

else if (s[7] == ".bsct," && s[8] == "initialized")

{

zeropage_size += int.Parse(s[5]);

}

else if (s[7] == ".ubsct" || s[7] == ".share")

{

zeropage_size += int.Parse(s[5]);

}

else if (s[7] == ".data," && s[8] == "initialized")

{

ram_size += int.Parse(s[5]);

}

else if (s[7] == ".bss")

{

ram_size += int.Parse(s[5]);

}

}

Console.WriteLine(" ");

// Program Size: Code=5056 RO-data=288 RW-data=68 ZI-data=1140

Console.WriteLine("Program Size: Code=" + code_size.ToString() + " Eeprom=" + eeprom_size.ToString() + " ZeroPage=" + zeropage_size.ToString() + " Ram=" + ram_size.ToString());

❺ 编译器的代码分析

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。
常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的 变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等。
程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变形有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threadedcode)。
机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

❻ 如何看一个.exe文件的代码

楼上纯粹扯淡
.exe的代码无论是什么语言什么编译器的,都会先编译成机器码之后再链接,所以无论什么软件编写的exe都是无法直接看到的,能看直接到的也只有exe里面的数据段中的数据
楼上说的应该是可执行的脚本(.bat .cmd .vbs .js什么的),那种玩意儿直接用记事本就可以看到代码
看一个.exe文件的代码就是传说中的逆向工程,分为反编译和反汇编,反编译就是把机器码还原成c++之类的源代码,这个一般不太现实,
反汇编就是把.exe的代码变成汇编源代码(跟机器语言也差不了太多,但是比机器码好理解得多)
进行反汇编需要反汇编工具,我所知的静态反汇编工具就有IDA,
能进行动态跟踪的就有大名鼎鼎的OllyDebug,一般这两个就够了,如果楼主不满意可以去搜搜其它软件

❼ c语言编译器怎么看结果啊

1、要点两次按钮,第一次是”编译“按钮,看有没有提示出错,提示没出错,才点“运行”按钮,出错要先改对了才能运行,点”运行“按钮。

2、编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。

❽ 请问如何在myeclipse编译器中查看java.class文件的源代码为什么我点击这种文件都报 SOURCR NOT FOUND呢

在你eclipse中装一个java反编译器就能查看,.class文件的源代码了

❾ 如何查看IAR编译器编译后的汇编代码,我想知道这个编译器是如何处理中断的

编辑界面右击工程点击options菜单项,选择c/c++ compiler选项卡中的list选项,勾选output assembler files,编译后则生成离线汇编代码文件。
调试界面下,点击view / disassembly 菜单项,则显示在线汇编代码窗口。

❿ auto格式怎么查看代码

C++ Primer Plus (第六版 中文版 人民邮电出版社)》第九章:内存模型和名称空间
"有关using编译命令和using声明,需要记住的一点是,他们增加了名称冲突的可能性。"

一般说来,使用 using命令 比使用 using编译命令 更安全,这是由于它只导入了制定的名称。如果该名称与局部名称发生冲突,编译器将发出指示。using编译命令导入所有的名称,包括可能并不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器并不会发出警告。另外,名称空间的开放性意味着名称空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称。

阅读全文

与怎么看编译器的代码相关的资料

热点内容
微信位置可以加密吗 浏览:466
算法蛮力法 浏览:436
随机排练命令 浏览:147
python多进程并发 浏览:41
安卓软件安装如何躲避安全检测 浏览:647
奇幻潮翡翠台源码百度云盘 浏览:187
什么软件可以免费pdf转word 浏览:15
php正则表达式大全 浏览:394
androidntp时间 浏览:299
轮机长命令簿英文 浏览:148
oppo铃声设置被加密怎么处理 浏览:548
粤苗app图形验证码怎么填 浏览:899
管家婆架设云服务器 浏览:254
php的登录界面代码 浏览:997
php开发客户端 浏览:998
theisle测试服怎么搜服务器 浏览:447
广播PDF 浏览:218
单片机编程300例汇编百度 浏览:35
腾讯云连接不上服务器 浏览:223
不能用来表示算法的是 浏览:861