Cortex-M3的微構造能力模擬器(地圖)
概述
快速Cortex-M3模擬器創建功率跡線。更多信息可以在https://eprint.iacr.org/2017/1253.pdf中找到
- 用C ++撰寫速度
- 讀取並模擬使用GNU ARM工具鏈從彙編/C源創建的.bin文件
僅支持加密原始編碼中通常發現的說明。可以在cpu.cpp中添加不支持的說明。
編譯
- 編譯模擬器:模擬器(包括)主函數存儲在靜態庫中。
- CD libsim/build
- 製作
- 進行安裝
- 編譯實施固件。我們以sec_add_v05為例:
- CD sec_add_v05/fw/build
- 製作
- 編譯實現模擬器(仍以SEC_ADD_V05為例):
- CD sec_add_v05/sim/build
- 製作
使用模擬器
模擬器讀取必須位於當前目錄中的.bin文件。 .bin文件的名稱取決於模擬器源中指定的內容。
開發固件時應該使用模擬器,因此運行模擬的通常方法是
- 將目錄更改為固件目錄:CD sec_add_v05/fw/build
- 運行模擬器:../ ../sim/build/sim_sec_add_v05 -n 1000
選項'-h'顯示有效的選項和參數。
編碼新的FW實施
FW實現只是C函數(可能包含裝配代碼),遵循ARM ABI(R0中的第一個參數,等等),沒有主函數。所有C和處理前的功能都可以使用。
該固件可以由支持Cortex-M3的任何ARM編譯器編譯。僅對ARM GCC進行了測試。通過修改變量“ dir”,可以在腳本/fw.mak中更改ARM編譯器可執行文件的路徑。
編碼新的模擬器
最好啟動並修改已經放映的模擬器。模擬器必須包含3個功能:
- void check_sec_algo(void):此函數應用了一些測試向量,並在測試是否通過。
- void t_test_sec_algo(選項和選項):此功能通過生成輸入和收集軌跡運行T_TEST
- 包裝器調用FW函數(將要模擬)。該包裝器(其簽名取決於FW函數)必須在模擬器內存中寫入參數,並相應地設置處理器寄存器。然後,它開始模擬。模擬後,它必須從模擬內存中復制結果。
支持更多的ARM V7-M說明
按照這些步驟支持模擬器中的指令:
- 在文件libsim/src/opcodes.h中添加解碼和掩碼值
- 在libsim/src/cpu.cpp中的函數步驟()中解碼說明
- 在同一文件中添加函數的執行
- 不要忘記將此新功能添加到cpu.h中的方法列表
宏test_ins32和test_ins16也簡化了指令的解碼,請不要忘記驗證新模擬指令的行為,尤其是管道寄存器reg_a和reg_b的行為!
驗證
模擬器支持的每個指令都必須針對RTL模擬進行驗證。 RTL樹未存儲在此存儲庫中,因為它屬於ARM Limited。下面描述的大多數過程僅用於我自己的文檔。
- 在模擬器樹中的文件實驗中添加新說明
- 在模擬器樹中的FW構建方向中執行檢查> sim_trace.log 2>&1
- 在rtl樹中的文件leakage.c中添加新說明
- 編譯:製作testcode testName =洩漏
- 模擬:進行運行testName =洩漏
- 將tarmac.log跟踪文件轉換為寄存器跟踪文件:../../../../../../../../python/gen_trace.py> verilog_trace.log
- 在模擬器樹中復制寄存器跟踪文件:cp〜/documents/repos/maps/rendered/sse050/邏輯/testBench/execution_tb/verilog_trace.log。
- 比較模擬器跟踪和RTL跟踪。視覺使用gvim -d sim_trace.log verilog_trace.log,或使用:./../../../../../../../python/compare_traces.py
錯誤/限制
知道限制是:
- LDRB/STRB指令的管道比模擬器中實現的管道更為複雜。例如,對於以下代碼:
ldrb r2, [r0]
strb r2, [r0]
reg_a和reg_b將無法通過模擬器正確模擬。功能仍然正確。當LDRB和STRB指令之間插入其他指令時,模擬是正確的。