欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++反汇编-函数指针分析

程序员文章站 2024-02-01 18:36:16
...
;6  :	int main() {
0x4013c9	push   %ebp
0x4013ca	mov    %esp,%ebp
0x4013cc	and    $0xfffffff0,%esp
0x4013cf	sub    $0x10,%esp //开辟0x10字节的数据空间
0x4013d2	call   0x427160 <__main>
;7  :	    void (__cdecl* pShow)(void) = show;
0x4013d7	movl   $0x4013ac,0xc(%esp) //把函数show地址存到栈+0xc处
;8  :	    pShow();
0x4013df	mov    0xc(%esp),%eax //把栈+0xc处存到eax
0x4013e3	call   *%eax //调用eax处,间接调用show地址处
;9  :	    show();
0x4013e5	call   0x4013ac <show()> //直接调用show地址处
;10 :	    return 0;
0x4013ea	mov    $0x0,%eax
;11 :	}
0x4013ef	leave
0x4013f0	ret
;3  :	void __cdecl show() {
0x4013ac	push   %ebp
0x4013ad	mov    %esp,%ebp
0x4013af	sub    $0x18,%esp //开辟0x18字节的数据空间
;4  :	    cout << "show\r\n";
0x4013b2	movl   $0x4b9029,0x4(%esp)
0x4013ba	movl   $0x4c6860,(%esp)
0x4013c1	call   0x4b2e80 <std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)>
;5  :	}
0x4013c6	nop
0x4013c7	leave
0x4013c8	ret