随笔分类 -  C_language

上一页 1 2 3 4 下一页

C++ 与 C 的预处理能力
摘要:#include <stdio.h> int main(void){ const int first = 5; int second = 8; int *p = (int *) &first; *p = 6; second = first; printf("second %d first %d\n", second, first); printf("con... 阅读全文

posted @ 2013-02-27 12:53 阿加 阅读(157) 评论(0) 推荐(0)

链接时指定动态库路径
摘要:生成动态链接库的时候,尝试运行,结果显示找不到动态库,使用ldd命令也查找不到,可以使用几种方法,可以看看man 8 ld.so;这里只记录了一种: gcc -o test main.o -L. -lpic -Wl,-rpath=/home/ryoma/Exercise/programmer/pic/test 阅读全文

posted @ 2013-02-02 21:21 阿加 阅读(458) 评论(0) 推荐(0)

-/bin/sh not found
摘要:1 #! /bin/bash 2 LIB_CUR_REL= 3 LIB_CUR_ABS= 4 5 get_binary_dependency() 6 { 7 readelf -d $1 | grep NEEDED | sed -n 's,.*\[\(.*\)\],\1,p' 8 } 9 10 expand_path() 11 { 12 LIB_CUR_ABS= 13 for i in /lib /usr/lib ${LD_LIBRARY_PATH} 14 do 15 for j in $@ 16 do 17 if [ -f ${i}/${j} ] 18 then 19 LIB_ 阅读全文

posted @ 2013-01-19 20:07 阿加 阅读(535) 评论(0) 推荐(0)

collect2
摘要:collect2在链接时它代替ld成了最终的链接器,一般情况下就可以简单的将它看成ld。实际上collect2时ld的一个包装,它最终还是调用ld完成所有的链接工作,那么collect2这个程序的作用时什么呢? 在有些系统上,汇编器和连接器并不支持".init" ".ctor"这些机制,于是为了实现在main函数前执行代码,必须在链接时进行特殊处理。collect2这个程序就是用来实现这个功能的,它会“收集”(collect)所有输入目标文件中那些命名特殊的符号,这些特殊符号表明它们是全局构造函数或在main前执行,collect2会生成一个临时的.c文 阅读全文

posted @ 2013-01-16 14:15 阿加 阅读(504) 评论(0) 推荐(0)

malloc 堆实现——空闲链表
摘要://程序员的自我修养,p_417 阅读全文

posted @ 2013-01-12 22:36 阿加 阅读(230) 评论(0) 推荐(0)

Hello World
摘要:/*TinyHelloWorld.c */ 1 char * str = "Hello world!\n"; 2 3 void print() 4 { 5 asm( "movl $13, %%edx \n\t" 6 "movl %0, %%ecx \n\t" 7 "movl $0, %%ebx \n\t" 8 "movl $4, %%eax \n\t" 9 "int $0x80 \n\t" 10 ::"r"(str):"edx", &q 阅读全文

posted @ 2012-12-27 13:45 阿加 阅读(362) 评论(0) 推荐(0)

弱引用和强引用
摘要:如果目标文件对外部目标文件符号进行强引用,但在链接成可执行文件时不能被正确的决议(好奇怪的名称,看看p_51),链接器就会报错,这是对于强引用(Strong Reference)而言的。与之相对应还有一种弱引用(Weak Reference),在处理弱引用时,如果该符号有定义,则链接器将对该符号的引用进行决议,如果该符号未被定义,则链接器对于该引用不报错。链接器处理强引用和弱引用的过程几乎一样,但是对于未定义的弱引用,链接器不认为它是一个错误;一般,对于未定义的弱引用,链接器默认其值为0,或者是一个特殊值,以便于程序代码能够识别。弱引用和弱符号主要用于库的链接过程。在GCC中,使用__attr 阅读全文

posted @ 2012-12-26 22:07 阿加 阅读(1965) 评论(0) 推荐(0)

弱符号与强符号
摘要:多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将他们都初始化,那么链接器将A和B进行链接时会报错。这种符号的定义可以被成为强符号(Strong Symbol)。有些符号的定义可以被称为弱符号(Weak Symbol)。对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号。通过GCC的"__attribute__((weak))"可以定义任何一个强符号为弱符号。强符号和弱符号都是针对定义来说的,不是针对符号的引用。 阅读全文

posted @ 2012-12-26 22:05 阿加 阅读(527) 评论(0) 推荐(0)

符号修饰与函数签名
摘要:p_87Linux下的GCC编译器中,默认情况下已经去掉了在C语言符号前加"_"的方式,但是Windows平台下的编译器还保持着在符号前加"_"的习惯。函数签名使得函数在目标文件中的符号变成与其源文件的函数名、函数参数、所在的类和名称空间及其它信息关联了起来。函数签名经名称修饰变成修饰后名称目标文件中的符号名,变量亦如此。c++filt工具可以用来解析被修饰过的名称,比如:c++filt _ZN1N1C4funcEi输出:N::C::func(int)C++为了与C兼容,在符号管理上,C++有一个用来声明或定义一个C符号的"extern &qu 阅读全文

posted @ 2012-12-26 17:58 阿加 阅读(296) 评论(0) 推荐(0)

strtab symtab shstrtab
摘要:关于.strtab,.symtab,.shstrtab.strtab是字符串表(STRING TABLE).shstrtab是段表字符串表(Section Header String Table),针对段表.symtab是符号表,一般是变量、函数shstrtab及symtab经常引用strtab中的字符串。ld链接脚本中将会定义很多特殊的符号,这些符号并没有在你的程序中定义,但是你可以直接声明并应用,我们称之为特殊符号。查看ld的默认链接脚本:ld -verbose对于这些特殊符号,我们不必定义它,只需声明引用即可使用。链接器会在将程序最终链接成可执行文件的时候将其解析成正确的值,只有在使用l 阅读全文

posted @ 2012-12-26 17:40 阿加 阅读(4879) 评论(0) 推荐(1)

va_arg实现
摘要:前几天测试的时候,遇到了个问题,顺便看了下printf的实现。讲下废话,测试是为了什么呢?几个月前测试6500指令集的我改了下代码,目的是为了能让测试通过,好在周末休息下,可是测试就是为了让程序在硬件上跑通吗?测试,本身就是为了发现问题,而我在进行指令集的时候却试图改变代码,以试图在芯片未流片前就用软件修正自身的问题,可是我们在这个阶段是完全可以可以更该一些错误的啊。测试的时候,发现问题很好啊,不然还要测试干嘛……废话讲多了,进入正题:printf实现部分的va_start, va_arg, va_end。C参数中在栈中的存储方式为从右到左,栈的生长方向为从高到低,无论是大端还是小端,低地址都 阅读全文

posted @ 2012-12-24 15:42 阿加

解释器中对 标号 的使用
摘要:android_6200/dalvik/vm/mterp/out/InterpC-portdbg.c + 467c89也支持向我这样看待码永远都学不好程序,感觉好迷茫,谁么时候能有个整体的认识?!写个示意程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define H(_op) &&op_##_op 5 #define HANDLE_OPCODE(_op) op_##_op: 6 7 #define DEFINE_GOTO_TABLE(_name) \ 8 static const void * _ 阅读全文

posted @ 2012-12-14 18:07 阿加 阅读(1085) 评论(0) 推荐(0)

C language_identifier_scope_name space_linkage_life time_storage duration
摘要:http://www.findfunaax.com/notes/file/134命名空间表示标识符的上下文。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。在编程语言中,命名空间是一种特殊的作用于,且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织起来。许多现代编程语言也都支持命名空间。我们谈下C语言的命名空间(我第一次知道)C语言标准定义了4中命名空间:1. label names 所有的label位于一个命名空间下;2. t 阅读全文

posted @ 2012-11-20 10:08 阿加 阅读(312) 评论(0) 推荐(0)

gcc 之 inline
摘要:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare).inline关键字不应出现在函数声明中。inline关键字仅仅是建议编译器做内联展开处理,而不是强制。在gcc编译器中,如果编译优化设置为O0,即使是inline函数也不会被内联展开,除非设置了强制内联(__attribute__((always_inline)))属性。对于可展开与必须当成函数的情形同时出现,则在展开处需展开,在当成函数调用处则当函数处理.1.1. static inlinegcc的static inline相对于static函数来说只 阅读全文

posted @ 2012-11-18 10:28 阿加 阅读(5627) 评论(0) 推荐(2)

this_fixmap_does_not_exist
摘要:1 #include <stdio.h> 2 3 static __always_inline unsigned int show(const unsigned int a) 4 { 5 if (a>3) 6 this_fixmap_does_not_exist(); 7 return a; 8 } 9 10 11 int main(int argc, char *argv[]) 12 { 13 unsigned int a=show(0); 14 printf("%d\n",a); 15 return 0; 16 }最主要就是编译防错。宏不能上边的功能。 阅读全文

posted @ 2012-11-17 20:27 阿加 阅读(206) 评论(0) 推荐(0)

测试
摘要:有一天,你运用了extern、volatile,结构显示conflicting type qualifiersmyhead.h 1 #ifndef MYHEAD 2 #define MYHEAD 3 4 extern int a; 5 extern void show(); 6 7 #endiftest.c 1 #include <stdio.h> 2 #include "myhead.h" 3 int a=3; 4 int main(int argc, char *argv[]) 5 { 6 7 show(); 8 printf("%d\n" 阅读全文

posted @ 2012-10-23 16:30 阿加 阅读(175) 评论(0) 推荐(0)

plt_0
摘要:记录下动态延迟加载,在unicore上没运行起来,所以在x86上运行函数test.c1 #include<stdio.h>23 int main(void)4 {5 printf("abcdefg\n");6 return 0;7 }反汇编(省略了相当一部分,因为没看懂且与PLT无关)207 080482e0 <puts@plt-0x10>:208 80482e0: ff 35 f8 9f 04 08 pushl 0x8049ff8209 80482e6: ff 25 fc 9f 04 08 jmp *0x8049ffc210 80482ec: 00 阅读全文

posted @ 2012-06-05 20:25 阿加 阅读(467) 评论(0) 推荐(0)

gas_marco_advance
摘要:在查阅unicore的memcpy函数时,感觉学到了不少东西,今天把一周的东西整理下,留下了这个文档,方便以后查阅文件 asm/hwcap.h/** linux/arch/unicore/include/asm/hwcap.h** Code specific to PKUnity SoC and UniCore ISA* Fragments that appear the same as the files in arm or x86** Copyright (C) 2001-2008 GUAN Xue-tao** This program is free software; you can 阅读全文

posted @ 2012-06-01 21:39 阿加 阅读(573) 评论(0) 推荐(0)

.previous
摘要:摘自百度文库:linux源代码中汇编语言部分总是有.previous、.section、.long,这是一个ELF段堆栈操作命令。其他的段堆栈操作命令还有.section、.subsection、.pushsection、.popsection,本命令交换当前段(及其子段)和最近访问过的段(及其子段... 阅读全文

posted @ 2012-05-30 17:15 阿加

attribute syntax
摘要:可以差下GUN GCC ATTRITUBE SYNTAX,阅读源码的时候方便查阅Attribute SyntaxThis section describes the syntax with which__attribute__may be used, and the constructs to which attribute specifiers bind, for the C language. Some details may vary for C++ and Objective-C. Because of infelicities in the grammar for attribute 阅读全文

posted @ 2012-05-13 16:24 阿加 阅读(1083) 评论(0) 推荐(0)

上一页 1 2 3 4 下一页

导航