1. 程式人生 > >2.driverbase-記憶體可讀、可寫、有效性、指標是否為空、深度校驗字串(隨手程式碼)

2.driverbase-記憶體可讀、可寫、有效性、指標是否為空、深度校驗字串(隨手程式碼)

1.如在ring3下,則要判斷是否可讀可寫:

KPROCESSOR_MODE PreviousMode;
	ULONG PID;
	PreviousMode = ExGetPreviousMode();
 
	// 如果非核心模式,就要開始檢查IN的這些引數都否可讀
	if (PreviousMode != KernelMode)
	{
		try
		{
			 ProbeForRead(ClientId, sizeof(CLIENT_ID), sizeof(ULONG));
						 ProbeForWrite(ClientId, sizeof(CLIENT_ID), sizeof(ULONG));
		}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{
			return GetExceptionCode();
		}
	}

2. 校驗指標是否為空,記憶體有效性:
	// 效驗ClientId是否為NULL
	if (ARGUMENT_PRESENT(ClientId)
		&& MmIsAddressValid(ClientId))
	{
		 //更安全的訪問。
		 PID = (ULONG)ClientId->UniqueProcess;
		 KdPrint(("OpenProcess %d\r\n",PID));
	}
3.深度校驗字串函式:
//深度的效驗
BOOLEAN ValidateUnicodeString(PUNICODE_STRING usStr)
{
	ULONG i;
 
	__try
	{
		if (!MmIsAddressValid(usStr))
		{
			return FALSE;
		}
		if (usStr->Buffer == NULL || usStr->Length == 0)
		{
			return FALSE;
		}
		for (i = 0; i < usStr->Length; i++)
		{
			if (!MmIsAddressValid((PUCHAR)usStr->Buffer + i))
			{
				return FALSE;
			}
		}
 
	}__except(EXCEPTION_EXECUTE_HANDLER){
 
	}
	return TRUE;
}

//驗證一個WCHAR內容的指標是否可以訪問
BOOLEAN ValidateWCHARString(WCHAR *pwzStr,ULONG_PTR Length)
{
	ULONG i;
 
	__try
	{
		//第一步判斷指標和大小是否為NULL,是的話就沒必要驗證了
		if  (pwzStr == NULL || Length == 0)
		{
			return FALSE;
		}
		//以length長度迴圈檢查指標pwzStr裡面的值
		for (i = 0; i < Length; i++)
		{
			//檢查是否可以訪問。
			if  (!MmIsAddressValid((PUCHAR)pwzStr + i))
			{
				//只要有一個位元組是不可讀取
				return FALSE;
			}
		}
 
	}
		__except(EXCEPTION_EXECUTE_HANDLER)
		{ //觸發了異常
		return FALSE;
	}
	return TRUE;
}



相關推薦

2.driverbase-記憶體有效性指標是否深度字串隨手程式碼

1.如在ring3下,則要判斷是否可讀可寫: KPROCESSOR_MODE PreviousMode; ULONG PID; PreviousMode = ExGetPreviousMode(); // 如果非核心模式,就要開始檢查IN的這些引數都否可讀 i

手把手一個基於Spring Boot框架下的引數元件JSR-303

前言           之前參與的新開放平臺研發的過程中,由於不同的介面需要對不同的入參進行校驗,這就涉及到通用引數的校驗封裝,如果不進行封裝,那麼寫出來的校驗程式碼將會風格不統一、校驗工具類不一致、維護風險高等其它因素,於是我對其公共的校驗做了一個封裝,達到了通過註解的方式即可實現引數統一校驗。 遇到的問

【轉】Linux中文件的執行權限的解讀以及chmod,chown,chgrp命令的用法

bsp local 目標 訪問權限 rac group 情況下 有用 三種 chmod是更改文件的權限 chown是改改文件的屬主與屬組 chgrp只是更改文件的屬組。 一、文件權限解讀   如上圖所示,開頭的-rwxrw-r--這一字符串標識文件權限。  

Linux中檔案的執行許可權的解讀以及chmod,chown,chgrp命令的用法

本文轉載自[strggle&小白],僅供自己學習參考使用 chmod是更改檔案的許可權 chown是改改檔案的屬主與屬組 chgrp只是更改檔案的屬組。 一、檔案許可權解讀   如上圖所示,開頭的-rwxrw-r--這一字串標識檔案許可權。   這

Linux進程啟動過程分析do_execve(執行程序的加載和運行)---Linux進程的管理與調度十一

[] flag 表示 conn nali 最終 roc 不同的 recursion execve系統調用 execve系統調用 我們前面提到了, fork, vfork等復制出來的進程是父進程的一個副本, 那麽如何我們想加載新的程序, 可以通過execve來加載和啟動新的程

動態載入python執行模組的辦法示例程式碼

【淚崩,終於看到編輯介面可以嵌入程式碼樣式了】 # -*- coding: utf-8 -*- import os import imp # 獲取目錄 file_path = os.getcwd() file_name = 'exectest' a = imp

練習 3-2 編寫一個函式escape(s, t),將字串t 複製到字串s 中,並在複製過程中將換行符製表符等不可見字元分別轉換\n\t等相應的可見的轉義字元序列。要求使用swich語句。

要將所有的轉義字元都進行轉換,分支會有很多,在這裡以換行符和製表符為例進行轉換。 #include<stdio.h> void escape(char s[],char t[]); vo

【11.2校內測試】【狀壓】【矩陣字首和】【樹狀陣列逆序對題意轉換

Solution 簽到水題,直接狀壓列舉所有情況算出答案即可。 Code #include<bits/stdc++.h> #define LL long long using namespace std; inline LL read() { LL x =

Java併發程式設計2:執行緒中斷程式碼

使用interrupt()中斷執行緒當一個執行緒執行時,另一個執行緒可以呼叫對應的Thread物件的interrupt()方法來中斷它,該方法只是在目標執行緒中設定一個標誌,表示它已經被中斷,並立即返回。這裡需要注意的是,如果只是單純的呼叫interrupt()方法,執行緒並沒有實際被中斷,會繼續往下執行。

Java併發程式設計3:執行緒掛起恢復與終止的正確方法程式碼

JAVA大資料中高階架構 2018-11-06 14:24:56掛起和恢復執行緒Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啟某個執行緒,這些方法已經被淘汰,因為它們是不安全的,不穩定的。如果在不合適的時候掛起執行緒(比如,鎖定共享資源時),此時便可能會發生死鎖條件——其他執行緒在等待該

PHP 判斷變數是否定義是否是否

                         

Android 動態獲取儲存位置電話的許可權程式碼

       今天客戶提出上傳資訊時需攜帶經緯度,且需要兩種獲取位置的方式;故經思考使用了GPS和網路獲取位置,但在經過實地測試的時候才發現沒寫獲取許可權。       便在登入介面加上獲取許可權程式碼,此次獲取的是儲存、位置

中國大學MOOC-陳越何欽銘-資料結構-2018秋 03-樹1 樹的同構 25 分

給定兩棵樹T1和T2。如果T1可以通過若干次左右孩子互換就變成T2,則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點A、B、G的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。 圖1 圖2 現給定兩棵樹,請你判

課程設計之四位加法計算器2C程式碼

#include<reg52.h> typedef unsigned char uint8; typedef unsigned int uint16; sbit rw=P2^5; sbit rs=P2^6; sbit e=P2^7; sbit led=P3

Java學習——Applet字串調字型

  import java.awt.*; import java.applet.Applet; public class GUI2 extends Applet{ public void paint(Graphics g) { g.setFon

angular的身份證規則省份生日性別手機號 。直接貼程式碼

(function() { 'use strict'; angular.module('app.house') .controller('HotelOrderCtrl', HotelOrderCtrl); HotelOrderCtrl.$inject =

區塊鏈能養貓養狗了?!手把手帶你復現AI+區塊鏈碼全過程!程式碼

區塊鏈養貓養狗、區塊鏈遊戲、區塊鏈遊戲,區塊鏈旅遊……打著區塊鏈名頭的專案蜂擁上線。 如何將區塊鏈和AI兩種不同技術結合?如何在python中編寫工作證明演算法?一致性演算法有哪些? 雷鋒字幕組特別編譯了本期「區塊鏈一致性演算法和人工

實現數字手圖片識別程式碼

假設環境都OK import scipy.special class NeuralNetWork: def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate): #初始化網路

中國大學MOOC-陳越何欽銘-資料結構-2018秋 02-線性結構3 Reversing Linked List 25 分

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being

遞迴先序非遞迴層次建立二叉樹並用三序遍歷之C語言

 先序就是直接用遞迴的方法建立,層次使用了輔助陣列,後一種方法我覺得友好多了。 #include "stdio.h" #define MAXSIZE 50 #define TRUE 1 #define FALSE 0 typedef int boo