فهرست منبع

added support of GetCurrentThreadStackLimits API for getting the stack top/bottom of a Windows thread

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8378 8c9fc860-2736-0410-a75d-ab315db34111
eth.morozova 6 سال پیش
والد
کامیت
360ff30672
1فایلهای تغییر یافته به همراه6 افزوده شده و 5 حذف شده
  1. 6 5
      source/Windows.Kernel32.Mod

+ 6 - 5
source/Windows.Kernel32.Mod

@@ -551,6 +551,8 @@ VAR
 	GetCurrentThread-: PROCEDURE {WINAPI} ( ): HANDLE;
 	GetCurrentThread-: PROCEDURE {WINAPI} ( ): HANDLE;
 	(** The GetCurrentThreadId function returns the thread identifier of the calling thread. *)
 	(** The GetCurrentThreadId function returns the thread identifier of the calling thread. *)
 	GetCurrentThreadId-: PROCEDURE {WINAPI} ( ): LONGINT;
 	GetCurrentThreadId-: PROCEDURE {WINAPI} ( ): LONGINT;
+	(** Retrieves the boundaries of the stack that was allocated by the system for the current thread. *)
+	GetCurrentThreadStackLimits-: PROCEDURE {WINAPI} (VAR lowLimit, highLimit: SIZE);
 	(** The GetDiskFreeSpace function retrieves information about the specified disk, including the amount of
 	(** The GetDiskFreeSpace function retrieves information about the specified disk, including the amount of
 			free space on the disk. *)
 			free space on the disk. *)
 	GetDiskFreeSpace-: PROCEDURE {WINAPI} ( VAR lpRootPathName: ARRAY   OF CHAR;
 	GetDiskFreeSpace-: PROCEDURE {WINAPI} ( VAR lpRootPathName: ARRAY   OF CHAR;
@@ -980,6 +982,7 @@ VAR
 		GetProcAddress(mod, "GetCurrentProcessId",SYSTEM.VAL(ADDRESS,GetCurrentProcessId));
 		GetProcAddress(mod, "GetCurrentProcessId",SYSTEM.VAL(ADDRESS,GetCurrentProcessId));
 		GetProcAddress(mod, "GetCurrentThread",SYSTEM.VAL(ADDRESS,GetCurrentThread));
 		GetProcAddress(mod, "GetCurrentThread",SYSTEM.VAL(ADDRESS,GetCurrentThread));
 		GetProcAddress(mod, "GetCurrentThreadId",SYSTEM.VAL(ADDRESS,GetCurrentThreadId));
 		GetProcAddress(mod, "GetCurrentThreadId",SYSTEM.VAL(ADDRESS,GetCurrentThreadId));
+		GetProcAddress(mod, "GetCurrentThreadStackLimits",SYSTEM.VAL(ADDRESS,GetCurrentThreadStackLimits));
 		GetProcAddress(mod, "GetDiskFreeSpaceA",SYSTEM.VAL(ADDRESS,GetDiskFreeSpace));
 		GetProcAddress(mod, "GetDiskFreeSpaceA",SYSTEM.VAL(ADDRESS,GetDiskFreeSpace));
 		GetProcAddress(mod, "GetDriveTypeA",SYSTEM.VAL(ADDRESS,GetDriveType));
 		GetProcAddress(mod, "GetDriveTypeA",SYSTEM.VAL(ADDRESS,GetDriveType));
 		GetProcAddress(mod, "GetExitCodeProcess",SYSTEM.VAL(ADDRESS,GetExitCodeProcess));
 		GetProcAddress(mod, "GetExitCodeProcess",SYSTEM.VAL(ADDRESS,GetExitCodeProcess));
@@ -1120,10 +1123,10 @@ VAR hout: HANDLE;
 	
 	
 	#IF SHAREDLIB THEN
 	#IF SHAREDLIB THEN
 
 
-		PROCEDURE ObjectsAttachThread(stackBottom: ADDRESS);
-		PROCEDURE AttachThread EXTERN "Objects.AttachThread"(stackBottom: ADDRESS);
+		PROCEDURE ObjectsAttachThread();
+		PROCEDURE AttachThread EXTERN "Objects.AttachThread"();
 		BEGIN
 		BEGIN
-			AttachThread(stackBottom);
+			AttachThread();
 		END ObjectsAttachThread;
 		END ObjectsAttachThread;
 		
 		
 		PROCEDURE ObjectsDetachThread();
 		PROCEDURE ObjectsDetachThread();
@@ -1218,9 +1221,7 @@ VAR hout: HANDLE;
 				PUSH EBX
 				PUSH EBX
 				PUSH ESI
 				PUSH ESI
 				PUSH EDI
 				PUSH EDI
-				PUSH EBP ; push the thread stack bottom
 				CALL ObjectsAttachThread
 				CALL ObjectsAttachThread
-				ADD ESP, 4 ; pop stack bottom
 				POP EDI
 				POP EDI
 				POP ESI
 				POP ESI
 				POP EBX
 				POP EBX