⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000006.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
        0804a494  fl_set_object_lsize
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a4a4&nbsp;&nbsp;fl_add_checkbutton
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a4b4&nbsp;&nbsp;fl_set_object_callback
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a4c4&nbsp;&nbsp;fl_add_menu
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a4d4&nbsp;&nbsp;fl_use_fselector
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a4e4&nbsp;&nbsp;__errno_location
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a4f4&nbsp;&nbsp;exit
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a504&nbsp;&nbsp;fl_get_filename
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a514&nbsp;&nbsp;__fxstat
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a524&nbsp;&nbsp;fl_add_timer
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a534&nbsp;&nbsp;fl_set_object_resize
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a544&nbsp;&nbsp;open
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a554&nbsp;&nbsp;fl_set_object_lalign
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a564&nbsp;&nbsp;fl_get_directory
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a574&nbsp;&nbsp;fl_show_choice
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a584&nbsp;&nbsp;fl_set_slider_size
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a594&nbsp;&nbsp;fputs
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a5a4&nbsp;&nbsp;execvp
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a5b4&nbsp;&nbsp;fl_get_counter_value
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a5c4&nbsp;&nbsp;close
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a5d4&nbsp;&nbsp;XOpenDisplay
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a5e4&nbsp;&nbsp;free
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a604&nbsp;&nbsp;fl_set_button
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0804a614&nbsp;&nbsp;_start
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;08052e7c&nbsp;&nbsp;whereError
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;080583c0&nbsp;&nbsp;_fini
&nbsp;<BR>&nbsp;&nbsp;&nbsp;mtv用到了xforms库,fl_xxxx都是这个库里的函数,&nbsp;其中的哪个fl_get_input是
&nbsp;<BR>这么的显眼,&nbsp;虽然没有做过xforms的编程,但是可以大胆设想这个东东会不会类似
&nbsp;<BR>windows中的GetDlgItemText(GetDlgItemTextA),&nbsp;所以不妨试试
&nbsp;<BR>
&nbsp;<BR>(gdb)break&nbsp;fl_get_input
&nbsp;<BR>Breakpoint&nbsp;1&nbsp;at&nbsp;0x804a264
&nbsp;<BR>(gdb)r
&nbsp;<BR>Starting&nbsp;program:&nbsp;/usr/X11R6/bin/mtv&nbsp;
&nbsp;<BR>(no&nbsp;debugging&nbsp;symbols&nbsp;found)...Breakpoint&nbsp;1&nbsp;at&nbsp;0x400429e3
&nbsp;<BR>
&nbsp;<BR>出现填写注册信息对话框,&nbsp;我做如下输入
&nbsp;<BR>
&nbsp;<BR>Name:&nbsp;I007
&nbsp;<BR>Order&nbsp;number:&nbsp;B123456789&nbsp;(有editmask,只能一字母后跟字数)
&nbsp;<BR>Key:&nbsp;87654321&nbsp;(也有editmask)
&nbsp;<BR>
&nbsp;<BR>按OK键后,&nbsp;mtv果然在断点处停住,&nbsp;猜得不错.&nbsp;如果没猜中,&nbsp;只好慢慢跟踪罗
&nbsp;<BR>(no&nbsp;debugging&nbsp;symbols&nbsp;found)...(no&nbsp;debugging&nbsp;symbols&nbsp;found)...
&nbsp;<BR>Breakpoint&nbsp;1,&nbsp;0x400429e3&nbsp;in&nbsp;fl_get_input&nbsp;()
&nbsp;<BR>(gdb)
&nbsp;<BR>
&nbsp;<BR>继续让它运行...
&nbsp;<BR>(gdb)&nbsp;c
&nbsp;<BR>Continuing.
&nbsp;<BR>
&nbsp;<BR>Breakpoint&nbsp;1,&nbsp;0x400429e3&nbsp;in&nbsp;fl_get_input&nbsp;()
&nbsp;<BR>(gdb)&nbsp;c
&nbsp;<BR>Continuing.
&nbsp;<BR>
&nbsp;<BR>Breakpoint&nbsp;1,&nbsp;0x400429e3&nbsp;in&nbsp;fl_get_input&nbsp;()
&nbsp;<BR>(gdb)&nbsp;c
&nbsp;<BR>Continuing.
&nbsp;<BR>
&nbsp;<BR>它连续调用了fl_get_input三次,&nbsp;正好对应三个输入项,&nbsp;然后注册信息错误的
&nbsp;<BR>对话框就出现了,&nbsp;看来是没错了,&nbsp;现在关键是要看最后一次调用fl_get_input
&nbsp;<BR>后的代码,当然看它每次调用fl_get_input后到取回的字串放到了什么地地方
&nbsp;<BR>也很重要.我重新输入一次注册信息,然后让它在三次调用fl_get_input后的
&nbsp;<BR>情况:
&nbsp;<BR>(gdb)&nbsp;c
&nbsp;<BR>Continuing.
&nbsp;<BR>
&nbsp;<BR>Breakpoint&nbsp;1,&nbsp;0x400429e3&nbsp;in&nbsp;fl_get_input&nbsp;()
&nbsp;<BR>(gdb)&nbsp;bt
&nbsp;<BR>#0&nbsp;&nbsp;0x400429e3&nbsp;in&nbsp;fl_get_input&nbsp;()
&nbsp;<BR>#1&nbsp;&nbsp;0x804ea96&nbsp;in&nbsp;_start&nbsp;()
&nbsp;<BR>#2&nbsp;&nbsp;0x4003b5f5&nbsp;in&nbsp;fl_do_forms&nbsp;()
&nbsp;<BR>#3&nbsp;&nbsp;0x8050a59&nbsp;in&nbsp;_start&nbsp;()
&nbsp;<BR>
&nbsp;<BR>这是堆栈中的情况,&nbsp;看来调用完fl_get_input后应返回到_start中的
&nbsp;<BR>地址0x804ea96处,&nbsp;我们来看看这段代码
&nbsp;<BR>(gdb)&nbsp;disass&nbsp;0x804ea96&nbsp;0x804ffff
&nbsp;<BR>Dump&nbsp;of&nbsp;assembler&nbsp;code&nbsp;from&nbsp;0x804ea96&nbsp;to&nbsp;0x804ffff:
&nbsp;<BR>0x804ea96&nbsp;&lt;_start+17538&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%eax,0x806e584
&nbsp;<BR>0x804ea9b&nbsp;&lt;_start+17543&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;&nbsp;%eax
&nbsp;<BR>0x804ea9c&nbsp;&lt;_start+17544&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;0x806e9d4,%eax
&nbsp;<BR>0x804eaa1&nbsp;&lt;_start+17549&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;0x18(%eax),%ecx
&nbsp;<BR>0x804eaa4&nbsp;&lt;_start+17552&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;&nbsp;%ecx
&nbsp;<BR>0x804eaa5&nbsp;&lt;_start+17553&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;0x804a264&nbsp;&lt;fl_get_input&gt;&nbsp;&nbsp;&lt;-第二次
&nbsp;<BR>0x804eaaa&nbsp;&lt;_start+17558&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%eax,%ebp
&nbsp;<BR>0x804eaac&nbsp;&lt;_start+17560&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;0x806e9d4,%eax
&nbsp;<BR>0x804eab1&nbsp;&lt;_start+17565&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;&nbsp;%eax
&nbsp;<BR>0x804eab2&nbsp;&lt;_start+17566&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;0x10(%eax),%edx
&nbsp;<BR>0x804eab5&nbsp;&lt;_start+17569&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;&nbsp;%edx
&nbsp;<BR>0x804eab6&nbsp;&lt;_start+17570&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;0x804a264&nbsp;&lt;fl_get_input&gt;&nbsp;&nbsp;&lt;-第三次
&nbsp;<BR>0x804eabb&nbsp;&lt;_start+17575&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%eax,%ebx
&nbsp;<BR>0x804eabd&nbsp;&lt;_start+17577&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%ebp,%edx
&nbsp;<BR>0x804eabf&nbsp;&lt;_start+17579&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%ebp,%eax
&nbsp;<BR>0x804eac1&nbsp;&lt;_start+17581&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addl&nbsp;&nbsp;&nbsp;$0x18,%esp
&nbsp;<BR>0x804eac4&nbsp;&lt;_start+17584&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;andl&nbsp;&nbsp;&nbsp;$0x3,%edx
&nbsp;<BR>0x804eac7&nbsp;&lt;_start+17587&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x804eadf&nbsp;&lt;_start+17611&gt;
&nbsp;<BR>0x804eac9&nbsp;&lt;_start+17589&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x804eada&nbsp;&lt;_start+17606&gt;
&nbsp;<BR>0x804eacb&nbsp;&lt;_start+17591&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpl&nbsp;&nbsp;&nbsp;$0x2,%edx
&nbsp;<BR>0x804eace&nbsp;&lt;_start+17594&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x804ead5&nbsp;&lt;_start+17601&gt;
&nbsp;<BR>0x804ead0&nbsp;&lt;_start+17596&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpb&nbsp;&nbsp;&nbsp;%dh,(%eax)
&nbsp;<BR>....
&nbsp;<BR>(gdb)&nbsp;break&nbsp;*0x804ea96
&nbsp;<BR>Breakpoint&nbsp;2&nbsp;at&nbsp;0x804ea96
&nbsp;<BR>(gdb)&nbsp;c
&nbsp;<BR>Continuing.
&nbsp;<BR>
&nbsp;<BR>Breakpoint&nbsp;2,&nbsp;0x804ea96&nbsp;in&nbsp;_start&nbsp;()
&nbsp;<BR>(gdb)&nbsp;info&nbsp;reg&nbsp;eax
&nbsp;<BR>eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8083dd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;134757840
&nbsp;<BR>(gdb)&nbsp;x/s&nbsp;0x8083dd0
&nbsp;<BR>0x8083dd0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;I007&quot;
&nbsp;<BR>
&nbsp;<BR>看来&nbsp;&quot;I007&quot;&nbsp;放在&nbsp;0x8083dd0,&nbsp;这个地址还存放到了&nbsp;0x806e584
&nbsp;<BR>
&nbsp;<BR>(gdb)&nbsp;ni
&nbsp;<BR>....
&nbsp;<BR>
&nbsp;<BR>到第三次调用fl_get_input完回到0x804eabb时,我们知道了输入的信息存在在哪
&nbsp;<BR>
&nbsp;<BR>名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;地址
&nbsp;<BR>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;I007&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8083dd0
&nbsp;<BR>Order&nbsp;number&nbsp;&nbsp;&nbsp;&nbsp;&quot;B123456789&quot;&nbsp;&nbsp;&nbsp;&nbsp;0x809e850
&nbsp;<BR>Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;87654321&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x809e880
&nbsp;<BR>
&nbsp;<BR>以下的一些反汇编代码中会有一些注释,&nbsp;主要说明是执行到这样地方时一些情况,
&nbsp;<BR>也不一步步的ni了..
&nbsp;<BR>(gdb)&nbsp;disass&nbsp;0x804eabb&nbsp;0x804ffff
&nbsp;<BR>Dump&nbsp;of&nbsp;assembler&nbsp;code&nbsp;from&nbsp;0x804eabb&nbsp;to&nbsp;0x804ffff:
&nbsp;<BR>0x804eabb&nbsp;&lt;_start+17575&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%eax,%ebx&nbsp;(eax:&nbsp;0x809e880-&gt;&quot;&quot;87654321&quot;)&nbsp;<BR>
&nbsp;<BR>0x804eabd&nbsp;&lt;_start+17577&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%ebp,%edx&nbsp;(ebp:&nbsp;0x809e850-&gt;&quot;B123456789&quot;&nbsp;<BR>)&nbsp;
&nbsp;<BR>0x804eabf&nbsp;&lt;_start+17579&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movl&nbsp;&nbsp;&nbsp;%ebp,%eax
&nbsp;<BR>0x804eac1&nbsp;&lt;_start+17581&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addl&nbsp;&nbsp;&nbsp;$0x18,%esp
&nbsp;<BR>0x804eac4&nbsp;&lt;_start+17584&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;andl&nbsp;&nbsp;&nbsp;$0x3,%edx
&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -