下面是ubuntu16.04環境下,使用arm-none-eabi-gcc編譯器,在stm32f427vit6上測試堆溢位的方法
1.測試**
#include
void
* ptr =0;
intmain()
free
(p);
p =malloc
(10240);
}return0;
}
2. 執行jlinkgdbserver和arm-none-eabi-gdbnohup jlinkgdbserver -if swd -device stm32f427vi -endian little -speed 1000 -port 2331 -swoport 2332 -telnetport 2333 -vd -ir -localhostonly 0 -singlerun -strict -timeout 0 &
arm-none-eabi-gdb -iex 'target remote localhost:2331' -iex 'monitor reset' -iex 'monitor halt' -ex 'load'
$(projectdir)
/build/$(projectname)
.elf
3. 輸入gdb除錯命令b main # 設定在mian()函式處斷點
c # 執行到main()會停下來
b 8 if ptr > 0x20018000 # 如果分配的記憶體位址超過範圍,產生斷點
c # 繼續執行,直到滿足斷點條件
p p # 列印堆區指標,這個指標越來越大,說明可能存在記憶體洩漏
p ptr # 列印堆區指標,這個指標越來越大,說明可能存在記憶體洩漏
正溢位 與 負溢位對指令的測試條件的證明
首先要知道乙個概念,就是帶符號的數如8位二進位制的表示範圍為 128 127 128的補碼與128的補碼是一樣的。對於零界的 對應的 的補碼都是一樣的 16位二進位制的補碼表示數的範圍 32768d 32767 8000h 7fffh 負數 負溢位 正數 正溢位 1d 1d ffffh 0001h ...
條件斷點 使用方法 vc6 vs2008
原文 除錯技術對程式設計師是非常重要的一門技術,本貼將全程 在vc6及vs2008中設定條件斷點。一.vc6.0中 vc6.0中按ctrl b可以彈出斷點設定對話方塊 點condition,彈出breakpoint condition對話方塊中輸入i 5 j 5。再點確定。再按f5執行程式,就會在設...
堆記憶體溢位的測試類 JVM學習筆記
記個筆記,手寫乙個測試類,模擬堆記憶體溢位。堆記憶體溢位測試類 vm agrs xms10m xmx10m xx heapdumponoutofmemoryerror author lixiang date 2019年04月12日 14 44 history 2019年04月12日 14 44 li...