版权声明:本文为博主原创文章,未经博主允许不得转载。 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