当前位置: 技术问答>linux和unix
有关程序的源码和汇编码的对应问题
来源: 互联网 发布时间:2015-02-23
本文导语: 看不懂啊。谁帮忙啊?!!! 谢谢了 汇编 源码 部分列在下面 0x8049fa8 : push %ebp 0x8049fa9 : mov %esp,%ebp 0x8049fab : push %edi 0x8049fac : push %esi 0x8049fad : push %ebx 0x804...
看不懂啊。谁帮忙啊?!!!
谢谢了
汇编 源码 部分列在下面
0x8049fa8 : push %ebp
0x8049fa9 : mov %esp,%ebp
0x8049fab : push %edi
0x8049fac : push %esi
0x8049fad : push %ebx
0x8049fae : sub $0x3c,%esp
0x8049fb1 : and $0xfffffff0,%esp
0x8049fb4 : sub $0x8,%esp
0x8049fb7 : push $0x62
0x8049fb9 : push $0x805a7f1
0x8049fbe : mov 0x8(%ebp),%esi
0x8049fc1 : mov 0xc(%ebp),%ebx
0x8049fc4 : movl $0x0,0xffffffd0(%ebp)
0x8049fcb : movl $0x0,0xffffffcc(%ebp)
0x8049fd2 : movl $0x0,0xffffffc8(%ebp)
0x8049fd9 : movl $0x0,0xffffffc4(%ebp)
0x8049fe0 : movl $0x0,0xffffffc0(%ebp)
0x8049fe7 : movl $0x0,0xffffffbc(%ebp)
0x8049fee : movl $0x14,0x806a904
0x8049ff8 : movl $0x35303235,0xffffffd8(%ebp)
0x8049fff : movw $0x32,0xffffffdc(%ebp)
0x804a005 : xor %edi,%edi
0x804a007 : call 0x8049b90
0x804a00c : add $0x10,%esp
0x804a00f : nop
0x804a010 : push %eax
0x804a011 : push $0x805a7f6
0x804a016 : push %ebx
0x804a017 : push %esi
int main(int argc, char * argv[])
{
int test;
int ret, op;
char * theOpts = "a:c:i:n:u:D";
char *netid = NULL, *device = NULL, *config = NULL;
char * user_num = NULL;
char *dstAddr = NULL;
u_char *auth_addr = NULL;
int daemon = 0; /* no daemon by default */
FILE *pidfile = NULL;
int pid;
char gao[6];
/* check for existing copies of the program */
char gao2;
char lirui='a';
User_Num = 20;
test =1;
gao2 = 'a';
strcpy(gao,"52052");
test = 2;
gao2 = 'b';
lirui='b';
printf("%c n",gao2);
另外
那位高人告知在下
怎么看汇编 ?
怎么把他和源代码对应上?
??
谢
谢谢了
汇编 源码 部分列在下面
0x8049fa8 : push %ebp
0x8049fa9 : mov %esp,%ebp
0x8049fab : push %edi
0x8049fac : push %esi
0x8049fad : push %ebx
0x8049fae : sub $0x3c,%esp
0x8049fb1 : and $0xfffffff0,%esp
0x8049fb4 : sub $0x8,%esp
0x8049fb7 : push $0x62
0x8049fb9 : push $0x805a7f1
0x8049fbe : mov 0x8(%ebp),%esi
0x8049fc1 : mov 0xc(%ebp),%ebx
0x8049fc4 : movl $0x0,0xffffffd0(%ebp)
0x8049fcb : movl $0x0,0xffffffcc(%ebp)
0x8049fd2 : movl $0x0,0xffffffc8(%ebp)
0x8049fd9 : movl $0x0,0xffffffc4(%ebp)
0x8049fe0 : movl $0x0,0xffffffc0(%ebp)
0x8049fe7 : movl $0x0,0xffffffbc(%ebp)
0x8049fee : movl $0x14,0x806a904
0x8049ff8 : movl $0x35303235,0xffffffd8(%ebp)
0x8049fff : movw $0x32,0xffffffdc(%ebp)
0x804a005 : xor %edi,%edi
0x804a007 : call 0x8049b90
0x804a00c : add $0x10,%esp
0x804a00f : nop
0x804a010 : push %eax
0x804a011 : push $0x805a7f6
0x804a016 : push %ebx
0x804a017 : push %esi
int main(int argc, char * argv[])
{
int test;
int ret, op;
char * theOpts = "a:c:i:n:u:D";
char *netid = NULL, *device = NULL, *config = NULL;
char * user_num = NULL;
char *dstAddr = NULL;
u_char *auth_addr = NULL;
int daemon = 0; /* no daemon by default */
FILE *pidfile = NULL;
int pid;
char gao[6];
/* check for existing copies of the program */
char gao2;
char lirui='a';
User_Num = 20;
test =1;
gao2 = 'a';
strcpy(gao,"52052");
test = 2;
gao2 = 'b';
lirui='b';
printf("%c n",gao2);
另外
那位高人告知在下
怎么看汇编 ?
怎么把他和源代码对应上?
??
谢
|
实在是没有书可看。
不过可以先看汇编语言的书,知道起码的push、mov等指令,
然后再看gcc编译出来的s文件,从最简单的
int i=0;
main()
{
}
开始,逐渐增加语句。我就是这么干的。
不过可以先看汇编语言的书,知道起码的push、mov等指令,
然后再看gcc编译出来的s文件,从最简单的
int i=0;
main()
{
}
开始,逐渐增加语句。我就是这么干的。
|
MOV 就是个赋值命令。a=100 对应的汇编 MOV addr ,100 。addr为a的地址。所以你的
原程序里有那么多赋值语句,就对应那么多的MOV 指令。
其他的你可以到书里找找各个指令的作用,很容易看懂的。
原程序里有那么多赋值语句,就对应那么多的MOV 指令。
其他的你可以到书里找找各个指令的作用,很容易看懂的。
|
对比着看,也不是太难。
|
gdb生成的?
|
这样看是很难看懂的,最好的办法是使用gcc的-S选项,
编译生成的.s文件,里面也是汇编代码,不过没有内存绝对地址,
这样比较好对应上c源文件。
另外,想看汇编代码,你得会汇编语言,并且知道AT&T汇编的起码知识才行
编译生成的.s文件,里面也是汇编代码,不过没有内存绝对地址,
这样比较好对应上c源文件。
另外,想看汇编代码,你得会汇编语言,并且知道AT&T汇编的起码知识才行
|
你想看那一句?我给你介绍介绍了
|
gz