C 語言指針的強制裝換

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	int num=8;
    #mov         dword ptr [num],8
    #彙編說明: 將值8 賦給  雙字num的地址內,
	int *q=(int*)num;
    #mov         eax,dword ptr [num]
    #彙編說明: 將雙字類型 num中的值 賦給  eax 寄存器中,
    #mov         dword ptr [q],eax
    #彙編說明: 將eax寄存器中的值 賦給 雙字類型 q 的地址內,
	int *m= (int*)&num;
    #lea         eax,[num]
    #將num 的地址 賦給 eax 寄存器中,
    #mov         dword ptr [m],eax
    #將 eax寄存器中的值付給 雙字類型 m  的地址內,
	char *p = (char*)&num;
    #lea         eax,[num]
    #將num 的地址 賦給 eax 寄存器中,
    #mov         dword ptr [p],eax
    #將eax寄存器中的值付給  雙字類型 p 的地址中,
 

     /*
     彙編說明:
     lea  指令傳遞的是地址.
     mov  指令傳遞的是值. 

     */



	printf("num: %x\r\n",&num);
	printf("p :%x\r\n",p);
	printf("*p :%d\r\n",*p);   # 這個取地址中的值得操做是失敗的,非法訪問了一個的地址.


	return 0;
}
相關文章
相關標籤/搜索