想学一下linux 下的汇编能否给点建议 。(是否有这个必要?) 比如书本和工具 。 谢谢 !
by linuxzealot - C/C++ - 2008-04-09 14:19:08 阅读(3514) 回复(17)
最近写了一个linux内联汇编代码
#include
汇编代码 typedef unsigned long long int ULONGLONG; static inline ULONGLONG read_counter() { ULONGLONG ts; unsigned int ts1, ts2; __asm__ ( "rdtsc;" "mov %eax , ts1;" "mov %edx , ts2" ); ts = ((ULONGLONG) ts2 << 32) | ((ULONGLONG) ts1); return ts; } 一段时间去cpu去时间...
我用gcc调试这个程序的时候会出错 提示内嵌汇编的那一行说:test.c:7: error: expected ‘)’ before ‘:’ token 请问这是怎么回事? /**/ int main (int _argc,char* _argv[]) { int * _p = (int*)_argc; (*_p) = 9999; _asm_ ("":::"memory"); if (* _p==9999) return 5; return (* _p); } [ 本帖最后由 neilshi 于 2006-8-22 16:47 编辑 ]
我在linux下嵌入汇编 asm("mov $0x3,%dx;" "mov $0x2,%al;" "out al,dx;"); 用GCC不带任何参数编译时,提示有这样的错误:too many memory references for 'out' 这是什么意思?应该怎么改?谢谢帮忙!!!
linux 下两个最主要的汇编器是 Nasm(free, Netwide Assembler)和 GAS(free, Gnu A ssembler), 后一个和 GCC 结合在一起. 在这篇文章里我将集中在 Nasm 上, 把 GAS 放在后面, 因为它使用 AT&T 的语法, 需要一个长的介绍. Nasm 调用时应该带上 ELF 格式选项("nasm -f elf hello.asm"); 产生的目标文件用 GCC 来链接("gcc hello.o"), 产生最终的 ELF 二进制代码. 下面的这个脚本可用来 编译 ASM 的模块; 我尽量把它写得简单, ...
下面这段代码是实现一个非常简单的exec的系统调用,为什么在redhat linux enterprise4 下,编译不通过呢?对汇编嵌入C不懂,还请大虾指教,谢谢! [code] void main() { __asm__(" jmp 1f 2: popl %esi movl %esi,0x8(%esi) xorl %eax,%eax movb %eax,0x7(%esi) movl %eax,0xc(%esi) movb $0xb,%al movl %esi,%ebx leal 0x8(%esi),%ecx leal 0xc(%esi),%edx int $0x80 xorl %e...