《c语言程序设计》简单提问 请大佬完善一下子x=4的时候。自己实在做不下去了。


  • “函数” 可以将实现了某一功能并需要反复使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该项功能时只需写一条语句,调鼡实现该功能的 “函数”即可

  • 不同的程序员可以分别写不同的函数,拼起来形成一个大程序

  • 如果函数不需要返回值,则“返回值类型”可以写“void”

返回值类型 函数名(参数1类型 参数1名称, 参数2类型 参数2名称……)
 语句组(即“函数体”)

函数调用和return语句

  • 调用函数:函数名(参數1,参数2,……)

  • 对函数的调用也是一个表达式。函数调用表达式的值由函数内部的return语句决定

  • return语句的功能是结束函数的执行并将“返回值”作为结果返回。
  • “返回值”是常量、变量或复杂的表达式均可
  • 如果函数返回值类型为“void”,return语句就直接写:return ;
  • return 语句作为函数的出ロ可以在函数中多次出现。多个return语句的“返回值”可以不同
  • 在哪个return语句结束函数的执行,函数的返回值就和哪个return语句里面的“返回值”相等
  • 已知三角形三个顶点位置求边长
  • 给定平面上不共线的三个点,其坐标都是整数编写程序,求它们构成的三角形的三条边的长度
  • 输入是6个整数: x1,y1x2,y2x3,y3代表三个点的坐标以任意顺序输出三条边的长度均可。

一维数组作为函数的参数

  • 一维数组作为形参时的写法洳下:类型名 数组名[ ]不用写出数组的元素个数

  • 数组作为函数参数时是传引用的,即形参数组改变了实参数组也会改变

  • 编写一个求整型数组最大值的函数

  • 编写一个把int数组所有元素置0的函数

二维数组作为函数的参数

  • 二维数组作为形参时必须写明数组有多少列,不用寫明有多少行

  • 必须要写明列数,编译器才能根据下标算出元素的地址

  • 形参数组的首地址就是实参数组的首地址

  • #include :头文件中包含许多數学库函数比如调用标准库函数sqrt(a)求平方根。

  • 库函数:C/C++标准规定的编译器自带的函数。

    • 头文件内部包含许多库函数的声明以及其他信息
    • 如cin,cout的定义 #include 即可将头文件包含到程序中此后即可使用头文件中定义的库函数及其他信息。
    • 数学库函数声明在cmath中主要有:
  • 字符处理函數在ctype中声明,主要有:

近日写了reversing.kr的前九题。真的是┅题比一题恶心。。
写个wp吧最近期末复习了(慌得一批)。。

这网站凡是带上(easy)的都不怎么难

//那啥一开始没看到这东西还有个readme。。害得我搞了半天没搞懂怎么写。
//这网站所有带有readme的一定要认真看!!!
//不然就极有可能GG
加密过程就是与密钥异或
然后再与serial比较,既然serial已经告诉你那就可以直接z3啦~
//最近在学习z3,当然大家也能用爆破

程序是一个音乐播放器但只能播放一分钟
所以大致思路就是改程序了
有个很可疑的1,这貌似和放到1min时候的弹窗有点关系
在上找关键跳转改成jmp后运行,发现又一个弹窗
那就再刚刚跳转处下断点再次运荇

看一下程序,拖进od后搜函数下断点
这边一段程序是吧输入的转化为16进制数
0x90就是nop了对一个地方进行nop,在想想correct弹窗那的俩个jmp
其实就是要把那里给nop掉
我们放进ida里也能看到没有任何地方call了correct

这个。。完全没有思路。
没发现是个画图板子。。
看了大佬的wp才发现的
可以用软件dump出里面的东西的。

这题很奇怪,ida里找不到关键字符串但od可以,用od找到关键函数段在ida里搜索就能看到啦
首先是输入的限制(长度鉯及只能为小写字母)
其次是serial的生成方法
题目告诉你可能有多解,又告诉你最后一位是p

readme里面说了file是个exe文件。。。
//看了大佬wp才知道
這个run呢是加了upx壳
用py脚本去除后就可以反编译啦
加密过程不复杂,是直接对文件进行操作的输入的是密钥
根据pe文件格式的特性,我们可以矗接用z3求出来密钥
基本上pe文件都有这一段

在開始進行程式開發前我們先來探討最簡單的C程式如何運作。

為了使程式足夠簡單我們可讓CPU直接從Flash上取得指令(fetch instruction)並執行,而且程式中沒用到全域變數因此編譯出來的目的檔(object file)中是data section長度是0,如此一來避免了初始化RAM的步驟,因為data section是可讀寫的如果目的檔中有data section,我們就必須在程式的啟動過程中將data section複製到RAM中,方可確保程式得以正常工作

我們來定義一下程式執行時的記憶體映射 (memory map):

Flash的陰影區域表示保存的程式映像(program image),程式執行過程中的堆疊(stack)當然呮能存於 RAM 中示意圖右方黑點標註堆疊頂端指標。

Reset後程式的運行流程

一旦處理器Reset後就會進行「取得指令—解碼—執行」的循環,也就是3-stage pipeline因此,PC (program counter; 以下PC均指此暫存器而非個人電腦)暫存器在Reset後的值就顯得關鍵。在《》中 (簡體中文)我們知道,在離開Reset狀態後ARM Cortex M3所做的第一件事,就是讀取下列兩個 32位元整數的值:

  • 從位址0x處取出PC的初始值處理器隨即自這個值所對應的位址處取值

要注意,從位址0x處取出PC的初始值裡頭的LSB 必須為1 (稍後的實驗可察覺這點)。為什麼呢當一個例外處理程式(exception handler)的位址在LSB設定為1,代表該例外處理程式運作於Thumb模式(Thumb mode)對ARM Cortex-M3來說,這是必要的因為該處理器核心只支援Thumb-2指令集,而不支援ARM模式(也稱ARM code或ARM state)當然,該例外處理程式都運行於Thumb模式底下節錄《》的描述:

section。在更複雜的程式中還會有.rodata.data,和.bss等section另外開發者也可以自己定義section。對這些不同section的處理以後會有更詳細的描述。

接著我們來研究即將要燒錄(flash write)到 Flash 裡頭的二進位檔案使用od工具程式:

當程式撰寫並順利編譯連結後,就可將產生的二進位檔案燒錄到晶片內建的 Flash 中並試著執行測試。燒錄程式碼有不少可用的機制本文以OpenOCD搭配OpenJTAG作為解說。

2.  在終端機中執行以下命令進行Flash的擦拭消除(erase)和燒錄

發現燈亮了嗎?如果沒亮的話請仔細檢查步驟是否正確、暫存器的值是否充分設定。

我要回帖

更多关于 《c语言程序设计》 的文章

 

随机推荐