1. 程式人生 > >彙編除錯技巧:呼叫C語言函式printf()

彙編除錯技巧:呼叫C語言函式printf()

除錯程式的痛苦莫過於除錯組合語言了~ 實際上對於一個嵌入式軟體工程師來說,組合語言的除錯跟C語言的除錯如出一轍。當然 ,也有些軟體可以用來模擬,例如real view, DS-5等等,但更為普通的情況是啥都沒有,接下來,本貼將介紹組合語言的列印除錯。

本帖主要內容有:

1.如何呼叫C語言的printf() 函式

2.ARM彙編除錯案例

一個簡單的列印函式,寫在c程式碼當中

test.c :

 void my_print(int a)

{

 printf("a = %d ", a);

return;

}

呼叫c函式的彙編程式碼如下:

my_asm_fun.s:

.text

.align

.thumb

.extern  my_print

.global my_asm_fun

.thumb_func

...

mov   r0, #1

b   my_print    // 預設輸入引數為r0暫存器,於是可以在標準輸出上打印出 a = 1

...

.end



相關推薦

彙編除錯技巧呼叫C語言函式printf()

除錯程式的痛苦莫過於除錯組合語言了~ 實際上對於一個嵌入式軟體工程師來說,組合語言的除錯跟C語言的除錯如出一轍。當然 ,也有些軟體可以用來模擬,例如real view, DS-5等等,但更為普通的情況是啥都沒有,接下來,本貼將介紹組合語言的列印除錯。 本帖主要內容有: 1.

[轉]在C#中呼叫C語言函式(靜態呼叫Native DLL,Windows & Microsoft.Net平臺)

原文:https://blog.csdn.net/yapingxin/article/details/7288325   對於不太瞭解.Net的人,如果想要了解.Net,我必須給他介紹P/Invoke。P/Invoke是什麼呢?簡單地說,就是在.Net中呼叫原生代碼(Native code)的一

java jni 呼叫c語言函式

今日在原始碼中遇到了native關鍵詞,甚是陌生,就查了點資料,對native是什麼東西有了那麼一點了解,並做一小記。 native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前檔案,而是在用其他語言(如C和C++)實現的檔案中。Java語言本身不能對

MATLAB學習(五)MATLAB中呼叫C語言函式

在MATLAB中呼叫C語言,可以共用程式碼,並且提高MATLAB程式的效率。查閱了網上的資料,做了一個整合。 親測效果如下: 1、MATLAB呼叫C語言函式的原理 這篇文章對MexFuntion中的每個變數,傳值過程等都寫得很清楚 2、MATLAB呼叫C語言例項

彙編角度檢視C語言函式呼叫約定【非常有用】

轉自:https://blog.csdn.net/Holmofy/article/details/76094986   為了防止出現不必要的程式碼影響組合語言的檢視,所以程式中不使用任何庫函式,以保持彙編程式碼的簡潔。 這裡所使用的彙編是VC的MASM。 預設函式呼叫方式_

C語言函式呼叫過程的彙編分析

轉自:   http://www.cnblogs.com/xiaojianliu/articles/8733560.html   下面一段C程式: int bar(int c, int d) { int e = c + d; return e; }

ARM基礎為何C語言(的函式呼叫)需要堆疊,而組合語言卻不需要堆疊

https://www.cnblogs.com/liuchengchuxiao/p/4113233.html 為何C語言(的函式呼叫)需要堆疊,而組合語言卻不需要堆疊 之前看了很多關於uboot的分析,其中就有說要為C語言的執行,準備好堆疊。 而自己在Uboot的start.S彙編程

Masm(611) 呼叫 第三方c語言函式彙編呼叫第三方c語言函式庫)

一開始的程式碼: void print(){ printf("hello hairi"); } lib1的程式碼 include Lib1.lib data segment ;定義資料段 infon db 0dh,0ah,'Please input a year

彙編c語言函式呼叫

學C語言時,就聽老師說函式呼叫時是通過棧來記錄資訊,又聽說什麼“保留現場”,"恢復現場"一些既聽不懂,也不知道怎麼弄懂的東西。最近正在學習Linux下的彙編,現在就通過一個簡單的例子來展示一下彙編級的函式呼叫,這樣能夠增加大家對C語言的理解。雖然並不是很完善,但是足夠闡明函式

C語言函式動態連結庫與靜態連結庫

首先,函式庫就是一些事先寫好的函式的集合,是別人分享的,我們可以拿來使用的。經過一些校準和整理,就形成一份標準化的函式庫。例如glibc 函式庫有兩種提供形式:動態連結庫與靜態連結庫 早起函式庫裡的函式都是直接共享的,就是所謂的開源社群。後來函式庫商業化,就出現了靜態連結庫與動態連結庫。

C語言 函式指標呼叫時加星號與不加星號?

函式指標在賦值以後,例如通過庫動態載入方式,然後在使用時,程式呼叫遇到了既加星號,也有不加星號的方式,因此有點疑惑。 先上例項,再作分析 #include <stdio.h> void myfun(void); int main(void) { void (*pf)(void); p

c語言函式呼叫模型

對於記憶體四區不懂得戳這裡 記憶體講解 這篇文章需要知道記憶體四區的知識 首先分級呼叫函式 使需要的資料入棧 然後逐級出棧,返回數值,將棧區的記憶體進行釋放    在main函式執行完之前 fa fb 都可以呼叫ma

分析簡單的c語言函式編譯得到的X86彙編程式碼(VS2013)

檢視原始碼生成的彙編程式碼:單步除錯->除錯->視窗->反彙編   總結: ①、函式被呼叫時,實參值賦值給函式棧中的形參,使用以下步驟:        I、call函式前實參值壓棧    &n

利用反彙編手段解析C語言函式

轉自: https://blog.csdn.net/songjinshi/article/details/8450419   1、問題的提出 函式是 C語言中的重要概念。利用好函式能夠充分利用系統庫的功能寫出模組獨立、易於維護和修改的程式。函式並不是 C 語言獨有的概念,

C語言函式和主函式呼叫

在C語言中主函式在呼叫子函式時,會產生相應的棧去存放呼叫子函式時的值,當呼叫完畢時,呼叫子函式所生成的棧則立即銷燬。主函式在呼叫子函式時如果為值傳遞時,則傳過去的引數並不影響主函式中引數的值,如果採用地址傳遞,則在子函式時會改變引數地址所指向的值。 Note:1、在子函式中生成一個數組想要通過返

c語言函式呼叫過程中棧的工作原理理解

差不多每個程式設計師都知道,函式呼叫過程,就是層層入棧出棧的過程。 那麼這個過程中的詳細的細節是什麼樣子的呢? 閱讀了以下幾篇文章之後,對整個過程基本理解了: C函式呼叫過程原理及函式棧幀分析 閱讀經典——《深入理解計算機系統》04 函式返回值與棧 針對自己的理解,做個記錄:

C語言函式呼叫——比較兩個數的大小

今天我們要寫的是用呼叫函式的方法來 比較兩個數字的大小 我們先看看程式的執行效果   一、先寫好框架 #include<stdio.h> void main() { }   二、然後定義我們需要的變數 int i,j;//只有兩個

常用的ARM彙編指令集與彙編呼叫C語言

***指令與偽指令: 指令:CPU機器指令的助記符,經過編譯後得到一串10組成的機器碼,可以被CPU直接讀取執行。 偽指令:編譯器環境提供,用來指導編譯過程,最終不會生成機器碼。 ***LDR/STR架構: CPU不能直接對記憶體的內容進行操作,必須藉助CPU

關於C語言函式呼叫的學習【待解決】

在學習關於函式呼叫時,仿照最大函式的呼叫,編寫了一個求最小值的程式,程式碼如下: 1 #include<stdio.h> 2 3 int min(int x,int y); 4 int main() 5 { 6 int a=10,b=20; 7 int c;

C語言函式呼叫的底層機制

這是一篇介紹C語言中的函式呼叫是如何用實現的文章。寫給那些對C語言各種行為的底層實現感興趣人的入門級文章。如果你是C語言或者彙編、底層技術 的老鳥或是對這個問題不感興趣,那麼這篇文章只會耽誤您的時間,您大可不必閱讀他。當然如果前輩們願意為我指出不足,我將十分感謝您的指導,並