① 在linux系统中怎么使C程序变成Intel的汇编程序而不是AT&T的,gcc编译后默认的是AT&T的
gcc编译的程序码是没有“Intel”、“at&t”之分的⋯⋯就是二进制而已。所谓的“Intel”、“at&t”是指汇版编语言的写作格式权。
如果你用yum软件包管理器,sudo yum install nasm。
如果你用apt-get,sudo apt-get install nasm。
如果不行,就到sourceforge下载nasm的rpm(如果是yum)或deb(apt-get),然后安装。
如果还不行,下载源码,然后终端里(在解压出的目录下):
./configure
make
sudo make install
最后,ndisasm -b 32 文件名。
顺便一说安装的这个nasm是intel格式的汇编编译器。相当好。然后ndisasm是它附带的反汇编器。
不好意思没法放网址。网络会把这个回答给删掉。
star特530的是ARM汇编的。
② linux中 gcc 下ld 链接成什么格式的目标文件,有生成的哪些文件可以反汇编,反汇编的工具有哪些
elf可执行文件
生成的目标文件(也即.o文件)和elf文件都可以反汇编
反汇编工具就是objmp命令,加个-S的选项就可以了。例如:
objmp -S hello > hello.mp
③ 如何在linux下把.so文件反汇编
这个一般没有要求。一般/lib /usr/lib 其它的要看具体情况。。。 如果你是自己编译的应用程序,.so文件一般就在安装目录下的lib目录中。
④ 深入理解Linux之计算机是怎样工作的
本周实验主要是反汇编C代码,生成汇编程序。冯·诺依曼理论的要点是:数字计算机的数制采用二进制,计算机应该按照程序顺序执行。人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。CPU通过总线从内存中读取一条条程序,根据程序的内容执行具体的步骤。CPU在读取指令时,通过寄存器IP来指向下一条指令(如果是32位系统,则为EIP),CPU的寄存器分为通用寄存器、段寄存器、状态寄存器。可以用一张图来说明
进程是一个可执行程序的实例。从内核角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码使用的变量,而内核数据结构用于维护进程状态信息。每个进程分配的内存由很多部分组成。当计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。
计算机的寻址方式老师介绍了以下几种:
movl%eax,%edxedx=eax 寄存器寻址
movl$0x123,%edxedx=0x123 立即寻址
movl0x123,%edxedx=*(int32_t*)0x123直接寻址
movl(%ebx),%edxedx=*(int32_t*)ebx间接寻址
movl4(%ebx),%edxedx=*(int32_t*)(ebx+4)变址寻址
⑤ linux下的so文件如何分析
使用objmp反汇编,用readelf 查看文件结构, 这两个工具在软件包 binutils中.
安装 binutils:
fedora,redhat: yum install binutils
ubuntu,Mint等: apt-get install binutils
Archlinux: pacman -S binutils
用版Intel格式汇编输出反权汇编指令: objmp -d -M intel xxxx.so