原文
從研究底層和彙編以來,已經多次接觸到“棧溢出”這個名詞了。
這次在彙編碼中看到了個不明就裡的 ___security_cookie ,查了下,原來是編譯器的安全檢查機制。轉載一篇文章:
首先,security cookie並不是windows系統自帶的保護機制,並不是說一個確實存在溢出漏洞的
程序,放到帶security cookie保護的環境中,就不能正常溢出了。
那麼,到底是什麼是security cookie呢?
我覺得從廣義上講,它應該是一種保護棧的機制,提供這種保護的,是程序本身,編譯進程序本身的代碼提供的,而不是系統中某個運行在黑暗角落中的線程。
所以,既然是程序自身就帶上的,為了不給程序員帶來額外的負擔,這份工作就交給編譯器來完成了。
vc6.0的cl.exe是不帶這個功能的,只有vc.net以後面版本的cl.exe才帶這個功能,就所謂的/GS選項。
即用vc.net的cl編譯器時,/GS選項默認就打開了。
現在,我們知道了這個機制的提供方,那麼,這個機製到底是怎麼一回事呢?
熟悉函數調用及返回前後的彙編指令的人肯定很清楚,在win32平台,對於stdcall類型的函數調用,當call指令運行完畢,當前的堆棧結構基本上是這樣的:
Raujika的筆記本
愛因斯坦 Albert Einstein: 如果你沒辦法簡單說明,代表你了解得不夠透徹。 If you can't explain it simply, you don't understand it well enough.
2020年5月13日 星期三
2020年3月21日 星期六
[轉載]簡單部署 Docker Swarm 測試叢集
原文
Docker Swarm 是 Docker 公司的 Docker 編配引擎,最早是在 2014 年 12 月發佈。Docker Swarm 目的即管理多台節點的 Docker 上應用程式與節點資源的排程等,並提供標準的 Docker API 介面當作前端存取入口,因此可以跟現有 Docker 工具與函式庫進行整合,本篇將介紹簡單的建立 Swarm cluster。
Docker Swarm 具備了以下幾個特性:
Docker Swarm 是 Docker 公司的 Docker 編配引擎,最早是在 2014 年 12 月發佈。Docker Swarm 目的即管理多台節點的 Docker 上應用程式與節點資源的排程等,並提供標準的 Docker API 介面當作前端存取入口,因此可以跟現有 Docker 工具與函式庫進行整合,本篇將介紹簡單的建立 Swarm cluster。
Docker Swarm 具備了以下幾個特性:
- Docker engine 原生支援。(Docker 1.12+)。
- 去中心化設計。
- 宣告式服務模型(Declarative Service Model)。
- 服務可擴展與容錯。
- 可協調預期狀態與實際狀態的一致性。
- 多種網路支援。
- 提供服務發現、負載平衡與安全策略。
- 支援滾動升級(Rolling Update)。
2020年2月24日 星期一
[轉載]理解不同的神經網絡損失函數(Understanding different Loss Functions for Neural Networks)
原文
There are various loss functions available for different objectives. In this guide, I will take you through some of the very frequently used loss functions, with a set of examples. This guide is designed by keeping the Keras and Tensorflow framework in the mind.
每要達到不同目的需要不同的損失函數 這篇文章會介紹一些比較常用的 附上一些例子 這篇文章主要以Keras以Tensorflow作背景框架
Loss Function | Brief Intro 損失函數 | 概觀
Loss function helps in optimizing the parameters of the neural networks. Our objective is to minimize the loss for a neural network by optimizing its parameters(weights). The loss is calculated using loss function by matching the target(actual) value and predicted value by a neural network. Then we use the gradient descent method to update the weights of the neural network such that the loss is minimized. This is how we train a neural network.
損失函數有助於優化神經網絡的參數. 我們的目的通常是用損失函數來最小化神經網絡的損失值(注:損失值通常代表神經網絡的恶劣程度)並優化權重. 損失值的取得通常來自損失函數,而損失函數以目標結果與預測結果作參數來評估損失值. 然後我們可用梯度下降法優化神經網絡權重,直到損失值達到最優化(注:我在說什麼). 這就是訓練神經網絡的方法
There are various loss functions available for different objectives. In this guide, I will take you through some of the very frequently used loss functions, with a set of examples. This guide is designed by keeping the Keras and Tensorflow framework in the mind.
每要達到不同目的需要不同的損失函數 這篇文章會介紹一些比較常用的 附上一些例子 這篇文章主要以Keras以Tensorflow作背景框架
Loss Function | Brief Intro 損失函數 | 概觀
Loss function helps in optimizing the parameters of the neural networks. Our objective is to minimize the loss for a neural network by optimizing its parameters(weights). The loss is calculated using loss function by matching the target(actual) value and predicted value by a neural network. Then we use the gradient descent method to update the weights of the neural network such that the loss is minimized. This is how we train a neural network.
損失函數有助於優化神經網絡的參數. 我們的目的通常是用損失函數來最小化神經網絡的損失值(注:損失值通常代表神經網絡的恶劣程度)並優化權重. 損失值的取得通常來自損失函數,而損失函數以目標結果與預測結果作參數來評估損失值. 然後我們可用梯度下降法優化神經網絡權重,直到損失值達到最優化(注:我在說什麼). 這就是訓練神經網絡的方法
2019年8月5日 星期一
unix組語筆記
gcc inline的ouput第一個會自動從eax取得 默認只能取一個(有空再研究一下gcc的inline好了)
movq 需要 uint64_t, movl 則只需要普通int
當call一個function會有
call function //function是函數簽名每次進人新function,function內的頭2句都會是
push rbp mov rsp,rbp作用是把上一個function的回傳地址推入stack然後再將目前的rsp內容複製到rbp,是一個進入新環境的概念 然後離開函式時會
ret //same as "pop eip"把當前esp pop進eip
另外再留一下gdb的用法 對理解程序有幫助 首先如果想反組譯某些函數
b*funcname //funcname是函數名 另外建議幫gdb安裝插件例如gdb-peda 一目了然比較好懂 r//same as run 作用是從breakpoint開始函式 nexti//下一個執行組語指令 p *x//打印x位置所存內容 i r//打印r系列register x /100c addr//顯示addr開始以後100個位的內容
2019年7月19日 星期五
Yocto修改內核源碼筆記
怕忘記 留個筆記
先下載poky linux
compile kernel和distro
先下載poky linux
git clone -b thud git://git.yoctoproject.org/poky poky_thud cd poky_thud進入標準開發環境
source oe-init-build-env接下來就是重點,進入編輯模式
bitbake -c devshell virtual/kernel做你想做的事 例如apply預先寫好patch
git apply xxx.patch設定defconfig
bitbake -c menuconfig如果想用本身定defconfig可以在
cat /boot/config-*找到 但只在普通linux distro找到 至於poky linux的路徑...我忘了:P(以後再補上)
compile kernel和distro
bitbake virtual/kernel bitbake core-image-full-cmdline然後當然 compile完要run他
runqemu qemux86補充: toaster project 貌似不能改kernel源碼,他用的kernel不是預設的virtual/kernel
2019年7月6日 星期六
[轉載]淺顯易懂的 SELinux 政策實施指南
原文
SELinux(Security-Enhanced Linux)是一款 Linux 的安全性增強模組,起初由美國國家安全局(NSA)所開發,後來則整合進 Linux 核心,成為 Linux 核心的內建模組。不過並非所有的 Linux 發行版都預設啟用了 SELinux。Red Hat 是 SELinux 的最主要支持者,預設啟用 SELinux 的發行版多半都是來自於 Red Hat 或其衍生物,例如 Fedora、RHEL、CentOS 等等。
儘管 SELinux 相較於基本的 Unix-like 權限管理而言是更為嚴謹 ,但同時也顯得更為複雜,因此有不少 Linux 的使用者會傾向於直接停用它。另一方面,也有不少的使用者會讓它維持啟用,然後再根據阻擋的狀況執行特定的放行動作。然而無論是選擇啟用或停用,或許更大多數的使用者其實都對 SELinux 的工作原理一知半解,也未曾明白它真正的益處。
今年是 SELinux 首次釋出的十週年,一名 Red Hat 的員工 Daniel Walsh 在 opensource.com 發表了一篇文章:Your visual how-to guide for SELinux policy enforcement,該文章旨在以淺顯易懂的方式,說明 SELinux 的原理。由於內容並不涉及任何 SELinux 的指令與操作,而是純粹利用譬喻、漫畫和舉例來解釋 SELinux,因此對任何人來說應該都是很容易吸收的一篇文章。
以下是 DR 所翻的中文版,原版的圖文內容皆採 CC BY-SA 授權,而圖片的作者為 Máirín Duffy。
今年我們慶祝 SELinux 的十週年,這真是驚人。SELinux 第一次被導入是在 Fedora Core 3(DR 註:更精確的說法是從 FC2 就包含了,然後在 FC3 成為預設啟用),接著是在 Red Hat Enterprise Linux 4。以下則是給那些從沒用過 SELinux、或者想要有個解釋的人……
SELinux(Security-Enhanced Linux)是一款 Linux 的安全性增強模組,起初由美國國家安全局(NSA)所開發,後來則整合進 Linux 核心,成為 Linux 核心的內建模組。不過並非所有的 Linux 發行版都預設啟用了 SELinux。Red Hat 是 SELinux 的最主要支持者,預設啟用 SELinux 的發行版多半都是來自於 Red Hat 或其衍生物,例如 Fedora、RHEL、CentOS 等等。
儘管 SELinux 相較於基本的 Unix-like 權限管理而言是更為嚴謹 ,但同時也顯得更為複雜,因此有不少 Linux 的使用者會傾向於直接停用它。另一方面,也有不少的使用者會讓它維持啟用,然後再根據阻擋的狀況執行特定的放行動作。然而無論是選擇啟用或停用,或許更大多數的使用者其實都對 SELinux 的工作原理一知半解,也未曾明白它真正的益處。
今年是 SELinux 首次釋出的十週年,一名 Red Hat 的員工 Daniel Walsh 在 opensource.com 發表了一篇文章:Your visual how-to guide for SELinux policy enforcement,該文章旨在以淺顯易懂的方式,說明 SELinux 的原理。由於內容並不涉及任何 SELinux 的指令與操作,而是純粹利用譬喻、漫畫和舉例來解釋 SELinux,因此對任何人來說應該都是很容易吸收的一篇文章。
以下是 DR 所翻的中文版,原版的圖文內容皆採 CC BY-SA 授權,而圖片的作者為 Máirín Duffy。
屬於你的 SELinux 政策實施視覺化教學指南
2018年2月22日 星期四
異步編程與CPS
有看過"使用Lua Function表示Lambda calculus"的,應該都會對hof(高階函數)不會陌生
使用高階函數 可以做出很多powerful的事請 例如異步編程 所謂異步 舉個栗子就像https://www.zhihu.com/question/19732473所說的
這種「不會馬上回傳」的性質,在某些更新頻繁且大量的情況下很有用.就例如ajax,如果一個網站有大量資料且前後相關,一般的逐頁搜索會很沒效率而且很不方便.但如果可以用一些簡單操作逐批資料加載 整個網站就變得人性化多了
至於異步要如何控制呢,這就是我要今天記下的題目:Continuation-passing style(CPS)
所謂CPS 顧名思義就是一種編程的style 在這種style底下 每個動作都會回傳一個函數 這個函數會呼叫下個函數直至動作完結 這個呼叫的函數大多是呼叫他的父函數自身 形成一種連續的時間線 著名的函數式語言Haskell在發明初期都是用CPS處理I/O 以下是一個node.js呼叫sqlite例子
使用高階函數 可以做出很多powerful的事請 例如異步編程 所謂異步 舉個栗子就像https://www.zhihu.com/question/19732473所說的
老張愛喝茶,廢話不說,煮開水。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
1 老張把水壺放到火上,立等水開。(同步阻塞)老張覺得自己有點傻
2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)老張還是覺得自己有點傻,於是變高端了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。
3 老張把響水壺放到火上,立等水開。(異步阻塞)老張覺得這樣傻等意義不大
4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(異步非阻塞)
老張覺得自己聰明了。
這種「不會馬上回傳」的性質,在某些更新頻繁且大量的情況下很有用.就例如ajax,如果一個網站有大量資料且前後相關,一般的逐頁搜索會很沒效率而且很不方便.但如果可以用一些簡單操作逐批資料加載 整個網站就變得人性化多了
至於異步要如何控制呢,這就是我要今天記下的題目:Continuation-passing style(CPS)
所謂CPS 顧名思義就是一種編程的style 在這種style底下 每個動作都會回傳一個函數 這個函數會呼叫下個函數直至動作完結 這個呼叫的函數大多是呼叫他的父函數自身 形成一種連續的時間線 著名的函數式語言Haskell在發明初期都是用CPS處理I/O 以下是一個node.js呼叫sqlite例子
訂閱:
文章 (Atom)