摘要:/*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
阅读全文
摘要:如果目标文件对外部目标文件符号进行强引用,但在链接成可执行文件时不能被正确的决议(好奇怪的名称,看看p_51),链接器就会报错,这是对于强引用(Strong Reference)而言的。与之相对应还有一种弱引用(Weak Reference),在处理弱引用时,如果该符号有定义,则链接器将对该符号的引用进行决议,如果该符号未被定义,则链接器对于该引用不报错。链接器处理强引用和弱引用的过程几乎一样,但是对于未定义的弱引用,链接器不认为它是一个错误;一般,对于未定义的弱引用,链接器默认其值为0,或者是一个特殊值,以便于程序代码能够识别。弱引用和弱符号主要用于库的链接过程。在GCC中,使用__attr
阅读全文
摘要:多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将他们都初始化,那么链接器将A和B进行链接时会报错。这种符号的定义可以被成为强符号(Strong Symbol)。有些符号的定义可以被称为弱符号(Weak Symbol)。对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号。通过GCC的"__attribute__((weak))"可以定义任何一个强符号为弱符号。强符号和弱符号都是针对定义来说的,不是针对符号的引用。
阅读全文
摘要:p_87Linux下的GCC编译器中,默认情况下已经去掉了在C语言符号前加"_"的方式,但是Windows平台下的编译器还保持着在符号前加"_"的习惯。函数签名使得函数在目标文件中的符号变成与其源文件的函数名、函数参数、所在的类和名称空间及其它信息关联了起来。函数签名经名称修饰变成修饰后名称目标文件中的符号名,变量亦如此。c++filt工具可以用来解析被修饰过的名称,比如:c++filt _ZN1N1C4funcEi输出:N::C::func(int)C++为了与C兼容,在符号管理上,C++有一个用来声明或定义一个C符号的"extern &qu
阅读全文
摘要:关于.strtab,.symtab,.shstrtab.strtab是字符串表(STRING TABLE).shstrtab是段表字符串表(Section Header String Table),针对段表.symtab是符号表,一般是变量、函数shstrtab及symtab经常引用strtab中的字符串。ld链接脚本中将会定义很多特殊的符号,这些符号并没有在你的程序中定义,但是你可以直接声明并应用,我们称之为特殊符号。查看ld的默认链接脚本:ld -verbose对于这些特殊符号,我们不必定义它,只需声明引用即可使用。链接器会在将程序最终链接成可执行文件的时候将其解析成正确的值,只有在使用l
阅读全文
摘要:前几天测试的时候,遇到了个问题,顺便看了下printf的实现。讲下废话,测试是为了什么呢?几个月前测试6500指令集的我改了下代码,目的是为了能让测试通过,好在周末休息下,可是测试就是为了让程序在硬件上跑通吗?测试,本身就是为了发现问题,而我在进行指令集的时候却试图改变代码,以试图在芯片未流片前就用软件修正自身的问题,可是我们在这个阶段是完全可以可以更该一些错误的啊。测试的时候,发现问题很好啊,不然还要测试干嘛……废话讲多了,进入正题:printf实现部分的va_start, va_arg, va_end。C参数中在栈中的存储方式为从右到左,栈的生长方向为从高到低,无论是大端还是小端,低地址都
阅读全文
摘要:使用rmmod会出现 rmmod : chdir(/lib/modules): No such file or directory ? 现在的内核模块在插入卸载时都会要转到/lib/modules/内核版本号/ 这个目录里。所以只要建立这个目录并且把要使用的模块.ko文件复制到这个目录就行了。 mkdir -p /lib/modules/$(uname -r) 这个语句不要加到制作ramdisk的脚本中,要加到rc文件中。 较新版本的busybox 1.13.1+ 要卸载模块必须要 “完全匹配模块名”才行,原来在老标本的使用模块文件名就能卸载,现在发现不行了。lsmod====>mmc_
阅读全文
摘要:卡检测CD和写保护WPSD卡槽对于WP和CD和COMM没有统一的物理规范.但对于引脚1~9有统一规范.引脚顺序为 8,7,6,5,4,3,2,1,9卡检测CD和写保护WP是通过机械方式实现WP和CD是否和COMM的连接来区别卡是否插入和是否有写保护.COMM为WP和CD的公共引脚,所以如果COMM被连接到地,那么WP和CD一定要使用Pull-UP电阻上拉到VCC,反之,如果COMM被连接到VCC,那么WP和CD一定要使用Pull-down电阻下拉到GND当卡插入时,卡槽中同COMM连接的金属连接会由于卡的插入使得COMM同CD短路(这个过程与卡插入与否有确定关系,即发生在COMM和CD间的插入
阅读全文
摘要:目前,中心的网络分为内网和外网,由一台计算机名为ppp的机器隔开,内网IP地址范围为192.168.1.2-192.168.1.254,子网掩码255255.255.0,默认网关192.168.1.1;外网IP地址范围为172.17.43.51-172.17.43.248,子网掩码255.255.255.0,默认网关172.17.43.252。一般,你可以在每个工位上看到两个网络接口,有“AMP”字样的是内网的网络接口,没有字的是外网的网络接口。所有的服务器和工作站都是放在内网的,只有内网的机器能登录,所以中心的设计工作实际上是用不着外网的,外网网口只是给你备用的。前面提到了,学校BRAS的@
阅读全文
摘要: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 * _
阅读全文
摘要:makefile: 1 mytest:test.o multiply.o 2 gcc $^ -o $@ 3 test.o:test.c 4 gcc -I include -c $^ -o $@ 5 multiply.o:multiply.c 6 gcc -I include -c $^ -o $@ 7 8 clean: 9 rm test.o multiply.o mytestinclude/multiply.h://File : multiply.h 1 #ifndef __Jerry_Mul__ 2 #define __Jerry_Mul 3 4 extern int mul...
阅读全文
摘要:echo -e "\033[32mHello, world!"echo命令-e选项的作用是激活终端对反斜线转义符(即\)的解释。引号内\033用于引导非常规字符序列,在这里的作用就是引导设置输出属性,后 边的[32m就是将前景色设置为绿色,字母m表示设置的属性类别,数字代表属性值。设置可以单独使用,例如:echo -e "\033[0m"这行命令的作用是恢复属性为默认值,也就是说0m设置项用于恢复默认值。同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:echo -e "\033[20;1H\033[1;4;32mHello,worl
阅读全文
摘要:没办法,自己没有看下去,又被说了“好弱”,自嘲下,在这个实验室,习惯了dalvik-bytecode.html中描述了字节码的顺序,其中,OP & Formatop指示执行何种操作,Format描述了该种操作所对应的数据流格式。这是师兄的一个case,记录下: 1 class add { 2 public static void main (String[] args) 3 { 4 int i = 2; 5 int k = 0; 6 for (i = 1; i < 100; i++) 7 k += i; 8 System.out.println("k = "
阅读全文
摘要:http://blogold.chinaunix.net/u2/69404/showart_1922655.htmlARM GCC 内嵌(inline)汇编手册
阅读全文
摘要:./Makefile: 1 mytest:main.o stack.o 2 gcc $^ -o $@ 3 main.o:main.c 4 gcc -I include -c $^ -o $@ 5 stack.o:stack.c 6 gcc -I include -c $^ -o $@ 7 8 clean: 9 rm main.o stack.o mytest./include/stack.h: 1 #ifndef __Jerry_stack__ 2 #define __Jerry_stack__ 3 4 typedef int stackelem; 5 typedef stackele...
阅读全文