分析
文章平均质量分 62
sitelist
这个作者很懒,什么都没留下…
展开
-
mkinitramfs脚本文件分析,位置/usr/sbin/mkinitramfs
#!/bin/shumask 0022export PATH='/usr/bin:/sbin:/bin'# Defaultskeep="n"CONFDIR="/etc/initramfs-tools"verbose="n"test -e /bin/busybox && BUSYBOXDIR=/bintest -e /usr/lib/initramfs-too原创 2015-01-26 07:37:29 · 2418 阅读 · 0 评论 -
gcc源代码分析,get_parm_info ()函数分析
/* Return a tree_list node with info on a parameter list just parsed. The TREE_PURPOSE is a chain of decls of those parms. The TREE_VALUE is a list of structure, union and enum tags defined.原创 2015-01-15 13:33:02 · 1667 阅读 · 0 评论 -
gcc源代码分析,finish_decl ()函数和rest_of_decl_compilation ()函数分析
int printf (const char * , ... ) ; 本文探讨函数声明到tree到rtx的生成过程。c-parse.y文件中有下面的一条规则,会调用start_decl ()函数和finish_decl ()函数。initdcl: declarator maybeasm maybe_attribute '='原创 2015-01-14 20:19:04 · 1261 阅读 · 0 评论 -
gcc源代码分析,finish_decl ()函数和push_parm_decl ()函数分析
parms: parm { push_parm_decl ($1); }/* This is what appears inside the parens in a function declarator. Is value is represented in the format that grokdeclarator expects. */pa原创 2015-01-14 21:56:22 · 1224 阅读 · 0 评论 -
gcc源代码分析,actualparameterlist ()函数分析
/* Build a function call to function FUNCTION with parameters PARAMS. PARAMS is a list--a chain of TREE_LIST nodes--in which the TREE_VALUE of each node is a parameter-expression. FUNCTION原创 2015-01-11 13:05:14 · 1210 阅读 · 0 评论 -
gcc源代码分析,default_conversion ()函数分析
/* Perform default promotions for C data used in expressions. Arrays and functions are converted to pointers; enumeral types or short or char, to int. In addition, manifest constants symbo原创 2015-01-11 15:42:48 · 1397 阅读 · 0 评论 -
gcc源代码分析,get_identifier ()函数分析,printf 产生标识符的过程
if (value == IDENTIFIER) { yylval.ttype = get_identifier (token_buffer); lastiddecl = lookup_name (yylval.ttype); if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_原创 2015-01-09 11:31:09 · 1318 阅读 · 0 评论 -
gcc源代码分析,build_function_call ()函数分析
在文件c-typeck.c中c-parse.tab.y文件中这个地方调用!primary: | primary '(' exprlist ')' %prec '.' { $$ = build_function_call ($1, $3); }/* Build a function call to function FUNCTION w原创 2015-01-09 19:02:55 · 1922 阅读 · 0 评论 -
gcc源代码分析,build_string ()函数分析
本文说明如何从源程序到一个tree节点的产生过程。以"Hello,world!\n"字符串为例。c-parse.tab.c文件中的yylex()函数是gcc编译器的词法分析部分。这里的一段代码: else { *p = 0; yylval.ttype = build_string (p - token_buffer, toke原创 2015-01-09 10:11:41 · 1211 阅读 · 0 评论 -
gcc源代码分析,print_node()函数分析第一部分
type type size align 8 size_unit 8 sep_unit 8 symtab 0 sep max pointer_to_this permanent unsigned SI原创 2015-01-08 18:02:22 · 1408 阅读 · 0 评论 -
内核重新编译之make install和生成initramfs的过程分析
$ sudo make installsh /home/ch/下载/linux-3.13/arch/x86/boot/install.sh 3.13.0 arch/x86/boot/bzImage \ System.map "/boot"run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0原创 2015-01-26 14:21:34 · 8908 阅读 · 0 评论 -
gcc源代码分析,grokdeclarator()函数分析 ,第二部分
函数声明的类型tree是如何生成的?grokdeclarator()函数的第二个参数为: value global 824d0* int> permanent VOID file (null) line 0 align 1 size_unit 1 offset 0原创 2015-01-16 22:36:51 · 1317 阅读 · 0 评论 -
gcc源代码分析,函数声明的类型<tree_list 95608产生的过程
int printf (const char * , ... ) ;typed_declspecs: typespec reserved_declspecs { $$ = tree_cons (NULL_TREE, $1, $2); }printf value原创 2015-01-17 12:05:59 · 1108 阅读 · 0 评论 -
gcc源代码分析,grokparms ()函数分析
arg_types = grokparms (TREE_OPERAND (declarator, 1), funcdef_flag /* Say it's a definition only for the CALL_EXPR closest原创 2015-01-17 15:28:43 · 1406 阅读 · 1 评论 -
gcc源代码分析,expand_call ()函数第四部分,emit_call_1 ()函数
本文是为了解释下面这4个rtx是如何产生的,和emit_call_1 ()函数有关。(const_int 4)(mem:QI (symbol_ref/v:SI ("printf")))(call (mem:QI (symbol_ref/v:SI ("printf"))) (const_int 4))(set (reg:SI 0) (call (m原创 2015-01-06 08:48:16 · 1302 阅读 · 0 评论 -
gcc源代码分析,expand_call ()函数分析第五部分,store_one_arg ()函数
本文主要是分析store_one_arg ()函数和expand_expr ()的关系来说明如何处理函数的参数。printf("Hello, world!\n");中的"Hello, world!\n"这个字符串常量的!expand_call () 函数中的相关代码: if (args[i].reg == 0 && TYPE_SIZE (TREE_TYPE原创 2015-01-06 11:07:17 · 1225 阅读 · 0 评论 -
gcc源代码分析gen_push_operand ()函数和emit_move_insn ()函数
如何生成下面红色的3个指令?和gen_push_operand ()函数和emit_move_insn ()函数有关,他们都在expand_call()函数中被调用。具体位置: rtx addr;#ifdef PUSH_ROUNDING if (args_addr == 0) addr = gen_push_operand ();原创 2015-01-05 18:32:01 · 1608 阅读 · 0 评论 -
gcc源代码分析,expand_call()函数第三部分
(insn_list 6 (nil))(insn_list 2 (insn_list 6 (nil)))(sequence[ ] )(reg:SI 0)(const_int 4)这次是解释这5条rtx的产生过程 相关的代码片段:/* Mark all register-parms as living through the call原创 2015-01-06 08:13:31 · 1295 阅读 · 0 评论 -
gcc源代码分析,expand_call()函数和printf("Hello, world!\n");的关系
expand_call()函数在expr.c文件中。下面是expand_call()函数的主要调试结果,记录之。主要是加入了debug_tree()函数和debug_rtx()函数。debug_tree()函数加入到了expand_expr()函数的开始。debug_rtx()函数加入到了gen_rtx()函数的结束处。emit_call_1()函数是何时调用的也能看出。e原创 2015-01-05 10:58:47 · 1566 阅读 · 0 评论 -
gcc源代码分析,debug_tree()函数的利用
tree.def 中第0x3d个元素是DEFTREECODE (CALL_EXPR, "call_expr", "e", 3)下面是debug_tree()函数的结果,可以看出expand_expr()函数到gen_rtx()函数的调用过程!expand_expr code = 3d type size align 3原创 2015-01-04 22:12:12 · 1607 阅读 · 0 评论 -
Gcc源代码分析,rtl.c源代码分析
Gcc源代码分析,insn和rtx的关系下面是gcc -dr hello.c产生的hello.dr文件的一部分(insn 6 4 7 (set (mem:SI (pre_dec:SI (reg:SI 7))) (symbol_ref:SI ("*LC0"))) -1 (nil) (nil))(call_insn 7 6 9 (set (reg:SI原创 2015-01-04 19:04:32 · 1916 阅读 · 0 评论 -
gcc源代码分析,grokdeclarator()函数分析
grokdeclarator部分代码: if (initialized) error ("parameter `%s' is initialized", name); decl = build_decl (PARM_DECL, declarator, type);调试结果:build_decl type原创 2015-01-15 18:42:51 · 1726 阅读 · 0 评论 -
gcc源代码分析,debug_tree()函数,又一利器啊
gcc源代码分析,debug_rtx()函数,利器啊print-tree.c#include "config.h"#include "tree.h"#include /* Names of tree components. Used for printing out the tree and error messages. */#def原创 2015-01-03 21:41:51 · 1537 阅读 · 0 评论 -
gcc源代码分析的方法【总结】
看gcc-1.40有段时间了,14年左右看了一段时间,15年左右看了一段时间。现在可以说基本上明白了gcc的大部分代码。如果说能快速的明白其中的原理,总结我看代码的方法捷径我列举以下几条。第一,gcc版本低,这是成功的前提,也是一条捷径。第二,分析最基本的hello.c文件,就一条函数调用,但是已经足够。第三,发现了debug_rtx ()函数和debug_tree ()函数。原创 2015-01-09 19:35:38 · 3740 阅读 · 1 评论 -
gcc源代码分析,在expand_call ()函数 和expand_expr_stmt ()函数的开始处加入debug_tree ()函数
对于expand_call函数来说最主要的参数就是exp这个tree树,打印出来之后我们终于看到了printf和Hello,world!expand_call type size align 32 size_unit 8 sep_unit 32 symtab 0 sep max原创 2015-01-08 21:38:15 · 1454 阅读 · 0 评论 -
gcc源代码分析,expand_expr_stmt()函数
stmt: compstmt {} | expr ';' { emit_line_note (input_filename, lineno); /* Do default conversion if safe and possibly important, in case within ({...})原创 2014-01-18 14:34:31 · 1776 阅读 · 0 评论 -
netcat源代码分析,doexec ()函数和readwrite ()函数的关系
#ifdef GAPING_SECURITY_HOLE if (pr00gie) /* -e given? */ doexec (netfd);#ifdef WIN32 if (!pr00gie) // doexec does the read/write for win32#endif#endif /* GAPING_原创 2013-04-22 23:08:48 · 1777 阅读 · 0 评论 -
netcat源代码分析,udp模式(1)服务端如何得到客户端的ip地址和端口号?
/* UDP is a speeeeecial case -- we have to do I/O *and* get the calling party's particulars all at once, listen() and accept() don't apply. At least in the BSD universe, however, recvfrom/PEEK原创 2013-05-14 18:16:27 · 2590 阅读 · 0 评论 -
cmd.exe 源代码中的ExecPgm()函数
/********************* START OF SPECIFICATION **************************//* *//* SUBROUTINE NAME: ExecPgm原创 2013-05-12 13:26:17 · 1847 阅读 · 0 评论 -
netcat源代码分析,doconnect()函数的作用
在服务端是建立侦听套接字,参数中,最后一个不为0。在客户端是直接和服务端连接,参数中,前两个参数第一个是服务端的ip地址,第二个是要连接的服务端的端口。doconnect() fprintf(stderr,"in doconnect ,listen socket nnetfd = %d.\n",nnetfd); if (o_listen) return (nn原创 2013-05-08 12:20:58 · 1793 阅读 · 0 评论 -
远程线程注入dll的一个例子,netcat.dll
远程dll示例,学习远程线程的例子masm32 v11 免费下载Windows环境下32位汇编语言程序设计中13章的远程注入dll的例子说明HideDll.dll既是nc.dll(改了个名,军刀netcat的动态链接库版),相当于nc -LP 66。loader.exe取自Windows应用程序捆绑核心编程。也可以用Windows环境下32位汇编语言程序设计RemoteTh原创 2013-05-09 13:15:51 · 2320 阅读 · 0 评论 -
netcat源代码分析,doexec.c中的句柄
Result = CreatePipe(&Session->ReadPipeHandle, &ShellStdoutPipe, &SecurityAttributes, 0); if (!Result) { holler("Failed to create shell stdout pipe, error = %s"原创 2013-05-04 21:00:43 · 1676 阅读 · 0 评论 -
update netcat 1.14 to 1.15 to support nc -u -lp port -e cmd.exe
更新说明:netcat-1.14之前的版本不支持udp模式下得到一个shell,既同时使用-u选项和-e选项。netcat-1.15下可以,使用如下:1.nc -ulp port -e cmd.exe nc -u ip port2.nc -ulp port nc -u ip port-e cmd.exenc115.rar by chenghao原创 2013-05-11 13:34:47 · 2115 阅读 · 0 评论 -
netcat -C选项的好处
可以有的应用,netcat -C xxx.f3322.org 55 -e cmd.exe。比如你单位上可以用上面的简单的命令作为一个远控的服务端。而把你家里的无线路由器的ip地址放到域名里xxx.f3322.org!这样你就可以在家里远控单位上的机器了。当然要映射端口55到你家里的机器的55号端口。这里可以是内网的机器。而不用用windows的计划服务或linux的定时原创 2013-05-01 17:18:02 · 1779 阅读 · 0 评论 -
nc的一个bug,nc ip port -e cmd.exe 命令后ctrl+c后不会关闭连接[已解决]
nc112.rar by chenghao0511#gmail.com现象是nc ip port -e cmd.exe一端的cmd.exe没有销毁。nc -lp port的一端nc输入没有反应。需要ctrl+c结束。doexec.c里面的一段:BOOLdoexec( SOCKET ClientSocket原创 2013-04-20 13:13:15 · 3593 阅读 · 0 评论 -
netcat源代码分析(4)doexec.c文件中的SessionWriteShellThreadFn ()函数
// **********************************************************************// SessionWriteShellThreadFn//// The write thread procedure. Reads from socket, writes to pipe connected// to shell pro原创 2013-04-22 23:15:53 · 1507 阅读 · 0 评论 -
gcc源代码分析 gen_rtx()函数
emit_jump_insn()定义在emit-rtl.c文件中被Expmed.c Expr.c Insn-emit.c Stmt.c中调用/* Make an insn of code JUMP_INSN with pattern PATTERN and add it to the end of the doubly-linked list. */rtxem原创 2014-01-11 18:24:00 · 1989 阅读 · 0 评论 -
gcc源代码分析,genemit由i386.md文件生成insn-emit.c文件
第一部分输入的:;; Call subroutine returning no value.(define_insn "call" [(call (match_operand:QI 0 "indirect_operand" "m") (match_operand:SI 1 "general_operand" "g"))] ;; Operand 1 not reall原创 2014-01-11 19:17:01 · 2352 阅读 · 0 评论 -
gcc源代码分析之gen_call_value()函数
(call_insn 7 6 9 (set (reg:SI 0) (call (mem:QI (symbol_ref/v:SI ("printf"))) (const_int 4))) -1 (nil) (nil))rtxgen_call_value (operand0, operand1, operand2) r原创 2014-01-12 10:00:33 · 1547 阅读 · 0 评论 -
gcc源代码分析,函数定义和finish_function()函数
fndef: typed_declspecs setspecs declarator { if (! start_function ($1, $3)) YYFAIL; reinit_parse_for_function (); } xdecls { store_parm_decls ()原创 2014-01-18 15:46:41 · 1842 阅读 · 0 评论