我尝试使用valgrind来描述一个简单的c prog:
[zsun @ nel6005001~] $ valgrind --tool = memcheck ./fl.out
== 2238 == Memcheck,内存错误检测器
== 2238 == Copyright(C)2002-2009,GNU GPL'd,Julian西沃德等人.
== 2238 ==使用Valgrind-3.5.0和LibVEX; 重新运行-h版权信息
== 2238 ==命令:./ fl.out
== 2238 ==
== 2238 ==
== 2238 == HEAP SUMMARY:
== 2238 ==在退出时使用:1,168字节in 1个块
== 2238 ==总堆使用量:1个allocs,0个frees,1,168个字节分配
== 2238 ==
== 2238 == LEAK SUMMARY:
== 2238 ==绝对丢失:0个块中的0个字节
== 2238 = =间接丢失:0个块中的0个字节
== 2238 ==可能丢失:0个块中的0个字节
== 2238 ==仍然可达:1个块中的1,168个字节
== 2238 ==抑制:0个块中的0个字节
== 2238 ==重新运行--leak-check = full以查看泄漏内存的详细信息
== 2238 ==
== 2238 …
我正在研究GCC生成的汇编代码.但我不明白:
movl $0x2d, 0x4(%esp)
Run Code Online (Sandbox Code Playgroud)
在第二个操作数中,0x4代表什么?偏移地址?注册EAX有什么用?
我有某个寄存器的存储器地址(地址LCDCW1是C000).
c代码:
#define LCDCW1 0xC000
*LCDCW1=0x31;
Run Code Online (Sandbox Code Playgroud)
我只想将数据写入该寄存器.代码有问题,如何纠正呢?
谢谢!
最近,我正在研究#define,const和enum的汇编代码:
C代码(#define):
3 #define pi 3
4 int main(void)
5 {
6 int a,r=1;
7 a=2*pi*r;
8 return 0;
9 }
Run Code Online (Sandbox Code Playgroud)
GCC生成的汇编代码(用于C代码中的第6行和第7行):
6 mov $0x1, -0x4(%ebp)
7 mov -0x4(%ebp), %edx
7 mov %edx, %eax
7 add %eax, %eax
7 add %edx, %eax
7 add %eax, %eax
7 mov %eax, -0x8(%ebp)
Run Code Online (Sandbox Code Playgroud)
C代码(枚举):
2 int main(void)
3 {
4 int a,r=1;
5 enum{pi=3};
6 a=2*pi*r;
7 return 0;
8 }
Run Code Online (Sandbox Code Playgroud)
GCC生成的汇编代码(用于c代码中的第4行和第6行):
6 mov $0x1, -0x4(%ebp)
7 mov -0x4(%ebp), %edx
7 mov %edx, …Run Code Online (Sandbox Code Playgroud) 我需要一个工具来测量程序的运行时间,比如gprof.但是gprof的分辨率还不够好(约0.01秒).oprofile似乎可以做到,我将尝试学习如何获取有关时间信息的数据,但我不能.
那么,谁能告诉我如何做到的步骤,或者任何人都知道其他工具可以做同样的事情?
任何人都可以详细解释下面的宏做什么?
#define write_XDATA(address,value) (((char *)0x010000) [address]=value)
Run Code Online (Sandbox Code Playgroud)
谢谢!