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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38313455/article/details/86641046
;3  :	int main() {
0x401350	push   %ebp
0x401351	mov    %esp,%ebp
0x401353	and    $0xfffffff0,%esp
0x401356	sub    $0x40,%esp
0x401359	call   0x4270f0 <__main>
;4  :	    char cArray[3][10] = {
;5  :	            "Hello ", "World ", "!\r\n"
;6  :	    };
0x40135e	movl   $0x6c6c6548,0x1a(%esp) //把4字节长的Hell放到栈+1a处
0x401366	movl   $0x206f,0x1e(%esp) //把2字节长的o 放到栈+1e处
0x40136e	movw   $0x0,0x22(%esp) //把1字节长的结尾符\0放到栈+22处
0x401375	movl   $0x6c726f57,0x24(%esp) //同上
0x40137d	movl   $0x2064,0x28(%esp)
0x401385	movw   $0x0,0x2c(%esp)
0x40138c	movl   $0xa0d21,0x2e(%esp) //同上
0x401394	movl   $0x0,0x32(%esp)
0x40139c	movw   $0x0,0x36(%esp)
;7  :	    char(*pArray)[10] = cArray;
0x4013a3	lea    0x1a(%esp),%eax //把数组首地址存到eax
0x4013a7	mov    %eax,0x3c(%esp) //把eax又存到栈+3c处
;8  :	    for(int i = 0; i < 3; i++) {
0x4013ab	movl   $0x0,0x38(%esp) //此处类似i = 0
0x4013b3	cmpl   $0x2,0x38(%esp) //此处类似i < 3
0x4013b8	jg     0x4013da <main()+138> //此处类似i >= 3
0x4013d3	addl   $0x1,0x38(%esp) //此处类似i++
0x4013d8	jmp    0x4013b3 <main()+99> //此处类似继续循环
;9  :	        cout << *pArray;
0x4013ba	mov    0x3c(%esp),%eax //把栈+3c处存回eax
0x4013be	mov    %eax,0x4(%esp) //把eax又存到栈+4处
0x4013c2	movl   $0x4c6860,(%esp) //准备调用cout
0x4013c9	call   0x4b2e10 <std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)>
;10 :	        pArray++;
0x4013ce	addl   $0xa,0x3c(%esp) //把栈+3c值加0a,此处类似跳到下一个字符串首
;11 :	    }
;12 :	    return 0;
0x4013da	mov    $0x0,%eax
;13 :	}
0x4013df	leave
0x4013e0	ret

猜你喜欢

转载自blog.csdn.net/qq_38313455/article/details/86641046