32位編譯
#include
#include
intmain
(int argc,
char
*ar**)
輸出:
a:20 b:0
這是模擬當時的情況,printf想用』』%d』的方式列印兩個變數。但是另乙個輸出為0.
呼叫的堆疊情況。一行4位元組
返回mian的位址
a低位a高位
b指向"a:%d b:%d\n"的位址
printf可以是用va_start,va_end,va_arg這些巨集實現的,大體的**邏輯
va_list va;
va_start
(va,_format)
;char
*p = _format;
for(
;p;p++)}
...}
出現問題的原因是因為使用』%d』輸出64位的變數。『%d』意味著記憶體偏移只有4位元組,而正真需要的是偏移8位元組
驗證:把輸出改為:
printf
("a:%d b:%d c:%d\n"
, a,b)
;
輸出:
a:20 b:0 c:10
甚至可以這樣寫:
#include
#include
#include
struct student
;int
main
(int argc,
char
*ar**)
;printf
("a:%d b:%d c:%d d:%d\n"
, stu)
;getchar()
;return0;
}
輸出:
a:2 b:3 c:4 d:5
以上出現這種情況是32位程式,64位沒有。
stm32 奇怪的位賦值問題 出錯了
1 在51微控制器裡 下面這兩種操作方法都是一樣的,沒有什麼問題!1 out1 r1 是微控制器的乙個io口 dat是傳進來的乙個資料 if dat 0x80 0 out1 r1 0 0是不亮,1是亮 else out1 r1 1 2 out1 r1 dat 0x8000 stm32裡,這樣操作不行...
Windows下32位程式的Inline Hook
話不多說,首先貼 主體參考自一本關於黑客技術的書,書名給忘了。當時只是敲出來跟著用,也沒有深入理解,最近再看,才發現一些原理。inline hook的好處就是可以獲取被hook函式的引數,我們可以自行處理這些資料,再呼叫本來的hook函式。include include include using ...
STM32 DMA傳輸出錯的防錯機制
對於每個 dma 資料流,可在發生以下事件時產生中斷 達到半傳輸 每次傳輸都會觸發,屬於正常觸發 傳輸完成 傳輸錯誤 fifo 錯誤 上溢 下溢或 fifo 級別錯誤 直接模式錯誤 可以使用單獨的中斷使能位以實現靈活性,如 表 43 所示。上訴為f4系列,f1系列中斷只有三個,所以只需處理三個即可。...