GVKun编程网logo

您好世界与Windows下的直接系统调用 没有ntdll.dll,kernel32.dll,…任何解决scheme?

16

本文将介绍您好世界与Windows下的直接系统调用没有ntdll.dll,kernel32.dll,…任何解决scheme?的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个

本文将介绍您好世界与Windows下的直接系统调用 没有ntdll.dll,kernel32.dll,…任何解决scheme?的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于(54) C# 调用 kernel32.dll、.NET Windows服务在ntdll.dll中崩溃、c – ntdll.dll [下面的框架可能不正确/缺失,没有为ntdll.dll加载符号]、c – 在windbg中,如何在kernel32.dll中的所有函数上设置断点?的知识。

本文目录一览:

您好世界与Windows下的直接系统调用 没有ntdll.dll,kernel32.dll,…任何解决scheme?

您好世界与Windows下的直接系统调用 没有ntdll.dll,kernel32.dll,…任何解决scheme?

为了使问题更清楚,我将发布Linux 32位的简短示例。

void _start() { const char text[] = "hello worldn"; long rv = 0; long exit_code = 0; // write system call to standard output asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" : "=a" (rv) : "0" (4),"ri" ((long)1),"c" ((long)text),"d" ((long)(12)) : "memory"); // exit system call - exit with exit code 0 rv = 0; asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" : "=a" (rv) : "0" (1),"ri" (exit_code) : "memory"); }

这个代码可以编译为Linux 32位x86这样的:

gcc -Wall -Wextra -nostartfiles -nostdlib -O3 -m32 hello32.c -o hello32

现在我想要为Windows做同样的事情(只是为了好玩,并且了解一些内部)。 目前我使用Win2K SP4 (在虚拟机内)进行testing。 因此,系统调用号码(可能会在不同的Windows版本之间进行更改)以及其他一些值用于Win2K SP4。 对于编译我使用mingw编译器。

对于Windows,我尝试在文件中写入“Hello,write! n”,而不是打印Hello World到控制台。 我已经有一个版本,直接进行系统调用,并写入一个文件(另外它使用不包括)。 源代码如下所示:

内核和用户模式之间的共享内存。 如何分享处理?

什么是内核代码的“__Pcpu_ATTRS”中的“section”?

如何在ring0中使用winapi函数(内核模式)?

如何知道 Registry Machine Software密钥何时被加载?

为什么堆栈必须是页面alignment的?

#define FILENAME L"\??\C:\data\hello_write\hello.txt" // system call ids for Windows 2000 SP4 #define SYS_CALL_ID_NT_CLOSE 0x0018 #define SYS_CALL_ID_NT_CREATE_FILE 0x0020 #define SYS_CALL_ID_NT_WRITE_FILE 0x00ED #define SYS_CALL_ID_RTL_INIT_UNICODE_STRING 0x7C8B // many makros and defines are from the reactos source code #ifndef VOID #define VOID void // from winnt.h:75 #endif //#define NTOSAPI __declspec(dllimport) // ntddk.h:62 only it the ntdll.dll is used #define NTOSAPI static // for the own system call wrapper functions #define DDKAPI __stdcall // from winddk.h #define CONST const // from ddk/winddk.h:66 or. windef.h:39 #define NULL 0 // windef.h:46 #define OBJ_CASE_INSENSITIVE 64L // from ntdef.h:11 #define SYNCHRONIZE 0x100000L // from winnt.h:230 #define GENERIC_WRITE 0x40000000 // from winnt.h:241 #define FILE_SHARE_READ 0x00000001 // from winnt.h:265 #define FILE_SHARE_WRITE 0x00000002 // from winnt.h:266 #define FILE_OPEN_IF 0x00000003 // from winnt.h:298 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 // from winnt.h:307 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 // from winnt.h:308 #define FILE_NON_DIRECTORY_FILE 0x00000040 // from winnt.h:309 #define STATUS_SUCCESS ((NTSTATUS)0x00000000L) // from ddk/ntstatus.h:35 // from windef.h:15 #define InitializeObjectAttributes(p,n,a,r,s) { (p)->Length = sizeof(OBJECT_ATTRIBUTES); (p)->RootDirectory = (r); (p)->Attributes = (a); (p)->ObjectName = (n); (p)->SecurityDescriptor = (s); (p)->SecurityQualityOfService = NULL; } typedef unsigned long ULONG_PTR,*PULONG_PTR; // basetsd.h:100 - __int64 verion not necessary typedef unsigned long DWORD; // from windef.h typedef char CHAR; // from winnt.h:77 typedef long LONG; // from winnt.h:79 typedef unsigned short USHORT,*PUSHORT; // from winnt.h:82 typedef unsigned long ULONG,*PULONG; // from winnt.h:83 typedef void *PVOID,*LPVOID; // from winnt.h:86 typedef unsigned short wchar_t; // from winnt:100 typedef wchar_t WCHAR; // from winnt:105 typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR; // from winnt.h:106 typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR; // from winnt.h:107 typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR; // from winnt.h:108 typedef PVOID HANDLE; // from winnt.h:151 typedef HANDLE *PHANDLE,*LPHANDLE; // from winnt.h:154 typedef long long LONGLONG; // from winnt.h:167 __int64 durch long long ersetzt typedef DWORD ACCESS_MASK,*PACCESS_MASK; // from winnt.h:1751 typedef LONG NTSTATUS,*PNTSTATUS; // from ntdef.h:28 typedef union _LARGE_INTEGER { // from winnt.h:2404 struct { DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER,*PLARGE_INTEGER; typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING,*PUNICODE_STRING; // from ntdef.h:33 typedef struct _OBJECT_ATTRIBUTES { // from ntdef.h:51 ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES,*POBJECT_ATTRIBUTES; typedef struct _IO_STATUS_BLOCK { // from ddk/winddk.h:785 union { NTSTATUS Status; PVOID Pointer; }; ULONG_PTR information; } IO_STATUS_BLOCK,*PIO_STATUS_BLOCK; // remove _ANONYMOUS_UNION and DUMMYUNIONNAME --> nameless union // *PIO_STATUS_BLOCK is added instead of // DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK) see ddk/winddk.h:102 typedef VOID DDKAPI // from ddk/winddk.h:780 (*PIO_APC_ROUTINE)( /*IN*/ PVOID ApcContext,/*IN*/ PIO_STATUS_BLOCK IoStatusBlock,/*IN*/ ULONG Reserved); long ntSysCall(long nr,long param) { long rv; __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x2e ; pop %%ebx" : "=a" (rv) : "0" (nr),"ri" (param) : "memory"); return rv; } __declspec(dllimport) VOID DDKAPI RtlInitUnicodeString( /*IN OUT*/ PUNICODE_STRING DestinationString,/*IN*/ PCWSTR SourceString); NTOSAPI VOID DDKAPI MyRtlInitUnicodeString( /*IN OUT*/ PUNICODE_STRING DestinationString,/*IN*/ PCWSTR SourceString) { DestinationString->Length = 0; PCWCH i; for (i = SourceString; *i; i++) { DestinationString->Length++; } DestinationString->Length *= sizeof(WCHAR); DestinationString->MaximumLength = DestinationString->Length + sizeof(WCHAR); DestinationString->Buffer = (PWSTR)SourceString; // from PCWSTR to PWSTR } NTOSAPI NTSTATUS DDKAPI MyCreateFile( /*OUT*/ PHANDLE FileHandle,/*IN*/ ACCESS_MASK DesiredAccess,/*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,/*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,/*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,/*IN*/ ULONG FileAttributes,/*IN*/ ULONG ShareAccess,/*IN*/ ULONG Createdisposition,/*IN*/ ULONG CreateOptions,/*IN*/ PVOID EaBuffer /*OPTIONAL*/,/*IN*/ ULONG EaLength) { return ntSysCall(SYS_CALL_ID_NT_CREATE_FILE,(long)&FileHandle); } NTOSAPI NTSTATUS DDKAPI MyWriteFile( /*IN*/ HANDLE FileHandle,/*IN*/ HANDLE Event /*OPTIONAL*/,/*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,/*IN*/ PVOID ApcContext /*OPTIONAL*/,/*IN*/ PVOID Buffer,/*IN*/ ULONG Length,/*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,/*IN*/ PULONG Key /*OPTIONAL*/) { return ntSysCall(SYS_CALL_ID_NT_WRITE_FILE,(long)&FileHandle); } NTOSAPI NTSTATUS DDKAPI MyClose( /*IN*/ HANDLE Handle) { return ntSysCall(SYS_CALL_ID_NT_CLOSE,(long)&Handle); } int main() { UNICODE_STRING fileNameUnicodeStringMy; WCHAR filenameMy[] = FILENAME; MyRtlInitUnicodeString(&fileNameUnicodeStringMy,filenameMy); OBJECT_ATTRIBUTES objectAttributes; InitializeObjectAttributes(&objectAttributes,&fileNameUnicodeStringMy,OBJ_CASE_INSENSITIVE,NULL,NULL); HANDLE hFile; IO_STATUS_BLOCK IoStatus; // It should use FILE_SYNCHRONOUS_IO_NONALERT or FILE_SYNCHRONOUS_IO_ALERT // otherwise it Failed NTSTATUS rv = MyCreateFile(&hFile,SYNCHRONIZE | GENERIC_WRITE,&objectAttributes,&IoStatus,FILE_SHARE_READ | FILE_SHARE_WRITE,FILE_OPEN_IF,//FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE,FILE_SYNCHRONOUS_IO_ALERT | FILE_NON_DIRECTORY_FILE,0); if (rv != STATUS_SUCCESS) { return 1; } LPSTR text = "Hello,write!n"; rv = MyWriteFile(hFile,text,14,NULL); if (rv != STATUS_SUCCESS) { return 2; } rv = MyClose(hFile); if (rv != STATUS_SUCCESS) { return 3; } return 0; }

代码可以在Win2k控制台下用mingw编译,如下所示:

C:datahello_write>gcc -Wall hello.c -o hello.exe

这段代码适用于我。 它会创build一个hello.txt,内容为“Hello,write!”。 但是这个版本链接到msvcrt.dll和kernel32.dll(kernel32.dll使用ntdll.dll …)。

下一步,我尝试创build一个没有任何依赖关系的二进制文件(没有dll,只有一个真正的静态二进制文件 – > no ntdll.dll,no kernel32.dll,no msvcrt.dll)

为了创build一个真正的静态二进制文件,我用void __main(void)replace了int main() (并且在main函数内部改变了所有返回的x; 返回 )。 之后我编译:

gcc -Wall -nostdlib -nostartfiles -nodefaultlibs hello.c

编译工作。 但程序什么都不做( 不起作用 )(可以启动,但没有输出文件(也许没有执行))。 现在我的问题;-)

哪里不对? 有什么必须使直接系统调用,没有任何库(没有ntdll.dll,没有kernel32.dll,…)工作“你好写”。 也许有人知道一些很好的参考。 该解决scheme不得用于Win2k。 一个解决scheme> = Win 2K或毫秒vc编译器也将鳍;-)(对不起,我的英语不好)

Linux:从32位用户模式程序中检测64位内核(长模式)

什么是初学者内核开发的良好准系统的Linux发行版?

为什么要使用这些怪异的嵌套结构

如何/在哪里可以findLinux内核错误修复?

在用户模式下阅读kallsyms

总结

以上是小编为你收集整理的您好世界与Windows下的直接系统调用 没有ntdll.dll,kernel32.dll,…任何解决scheme?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

(54) C# 调用 kernel32.dll

(54) C# 调用 kernel32.dll

   

 

 

 

https://www.cnblogs.com/cwy173/archive/2010/10/02/1841321.html

Kernel32 API

AddAtom 向本地原子表添加一个字符串
AllocConsole 为当前进程分配一个新控制台
AreFileApisANSI 确定一个WIN32文件函数集是否在使用ANSI或OEM字符集代码页
BackupRead 向一缓冲区读进与给定文件相关联的数据
BackupSeek 在访问数据流中向前搜索
BackupWrite 将数据传送到指定的文件或目录中
Beep 在扬声器上发出简单的声音
BeginUpdateResource 返回一个可被用来增加、删除或替换一个可执行文件资源的句柄
BuildCommDCB 用指定字符串的值来填充指定的设备控制块
BuildCommDCBAndTimeouts 将设备定义串转换成恰当的设备控制块代码
CallNamedPipe 连接一个消息类型管道,向管道中写入或从中读出,然后关闭该管道
ClearCommBreak 恢复给定通信设备的字符传输,并将传输设置成非中断状态
ClearCommError 获得有关通信错误的信息,并报告该设备的当前状态
CloseHandle 关闭一个打开的对象句柄
CloseProfileUserMapping 关闭所有与初始化文件映射有关的登记键的句柄
CommConfigDialog 显示有关通信设备的配置对话框,以允许进行配置
CompareFileTime 比较两个文件的时间
CompareStringW 比较同一地点两个字符串
ConnectNamedPipe 使管道服务进程等待客户进程与之已命名的管道实例相连接
ContinueDebugEvent 使调试程序继续先前报告的一个调试事件的线程
ConvertDefaultLocale 把缺省地点值转换成实际地点标识符
CopyFile 拷贝文件
CreateConsoleScreenBuffer 创建一个控制台屏幕缓冲区并返回其句柄
CreateDirectory 创建一个新目录
CreateDirectoryEX 创建一个含有指定模板属性的新目录
CreateEvent 创建一个事件对象
CreateFile 创建、打开或截断一个文件、管道、通信源、磁盘设备或控制台,并返回其句柄
CreateFileMapping 为指定文件创建一个映射对象,以便文件内容被共享
CreateIoComplationPort 使一个打开的实例和一个最新创建的或正存在的I/O完成端口相联系;或创建一个不和文件相联系的I/O完成端口
CreateMailslot 创建具有指定名字的邮件槽,并返回句柄
CreateMutex 创建一个互斥对象并返回句柄
CreateNamedPipe 创建一个有名管道的实例并返回句柄

CreatePipe 创建一个无名管道并返回指向该管道的读端和写端句柄
CreateProcess 创建新进程和它的主线程
CreateRemoteThread 创建运行在另一个进程地址空间上的线程
CreateSemaphore 创建一个信号对象并返回其句柄
CreateTapePartition 重新格式化磁带
CreateThread 创建一个线程以便在调用进程的地址空间内执行
DebugActiveProcess 使调试程序连接到活动进程上并调试该进程
DebugBreak 使断点异常发生在当前进程中,以便调用进程给调试程序发信号,迫使它接受某个动作
DefineDosDevice 定义、重新定义或删除DOS设备名
DeleteAtom 减少局部字符串原子引用的计数值
DeleteCriticalSection 删除由未被拥有的临界对象所使用的所有资源
DeleteFile 删除一个已有文件
DeviceIoControl 将一个控制码直接发送给指定的设备驱动程序,以执行指定的操作
DisableThreadLibraryCalls 禁止DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知指定的DLL库

DisConnectNamedPipe 取消一个有名管道实例的服务器端与一客户进程的连接
DosDateTimeToFileTime 将MSDOS日期和时间值转换为一个64位文件时间
DuplicateHandle 复制一个对象句柄
EndUpdateResource 在可执行文件中终止一个资源的修改
EnterCriricalSection 等待指定临界区对象的使用权
EnumCalendarInfo EnumDateFormats 枚举指定地点有效的 长短日期格式
EnumResourceLanguages 查找模块中符合指定类型和名称的每个资源,并将资源的语言传递给一个自定义的回调函数
EnumResourceNames 查找模块中符合指定类型的资源,并将其名称传递给一个自定义的回调函数
EnumResourceTypes 查找模块中的资源,并将每个资源的类型传递给一个自定义的回调函数
EnumSystemCodePages 枚举系统已安装或支持的代码页
EnumSystemLocales 枚举系统已安装或支持的地点
EnumTimeFormats 枚举指定地点可用的时间格式
EraseTape 擦除磁带所有或部分内容
EscapeCommFunction 指示一个给定的通信设备执行一个扩展功能
ExitProcess 结束一个进程及其所有线程
ExitThread 结束一个线程
ExpandEnvironmentString 扩展环境变量字符串并以定义值替换它们
FatalAppExit 显示一个消息框,当此消息框关闭时终止此应用程序

FatalExit 将执行控制权交给调试程序
FileTimerToDosDateTime 将64位文件时间转换成MSDOS的日期和时间值
FileTimeToLocalFileTime 根据格林威治时间坐标将文件时间转换成一个局部文件时间
FileTimeToSystemTime 将64位文件时间转换成系统时间格式
FillConsoleOutputAttribute 为指定数目的字符单元设置文本和背景颜色属性
FillConsoleOutputCharacter 将一字符按指定次数多次写入屏幕缓冲区
FindAtom 在局部原子表中查找指定的字符串,并检取与该串相关的原子
FindClose 关闭指定的查找句柄
FindCloseChangeNotification 停止对通知句柄改变的监测
FindFirstChangeNotification 创建一个改变通知句柄,并设置初始化改变通知过滤条件
FindFirstFile 在目录中查找与其指定名称相匹配的一个文件
FindNextChangeNotification 请求操作系统在下次检测一个相应改变时发出一个改变通知句柄
FindNextFile 继续前一次FindFirstFile函数调用的文件查找
FindResource 在模块中查找给定类型和名称的资源位置
FindResourceEx 在模块中查找给定类型和名称的资源位置
FlushConsoleInputBuffer 刷新控制台输入缓冲区
FlushFileBuffers 清除用于指定文件的缓冲区,并将所有缓存的数据写入此文件中
FlushInstructionCache 为指定的进程刷新指令高速缓存器
FlushViewOfFile 将一个文件映射视图中的字节段写到盘上

FoldStringW 将一个通配字符的串映射为另一个字符串
FormatMessage 格式化一个消息串
FreeConsole 使调用进程从其控制台分离
FreeEnvironmentStrings 释放环境字符串块
FreeLibrary 把已装入的库模块的引用数减1
FreeLibraryAndExitThread 将已装入的DLL库调用数减1,并退出一个调用线程
FrreeTesource 释放由LoadResource函数装入的资源
GenerateConsoleCtrEvent 向和共享调用进程有关的控制台进程组发送一个特殊信号
GetACP 检取ANSI系统代码页的标识符
GetAtomName 检取与指定局部原子有关的字符串的一个拷贝
GetBinaryType 确定一个文件是否为可执行以及可执行文件的类型
GetCommandLine 返回当前进程的命令行
GetCommConfig 检取给定通信设备的当前配置
GetCommMask 检取给定通信设备的事件屏蔽值
GetCommModemStatus 检取调制解调器控制寄存器值
GetCommProperties 检取给定通信设备的通讯特性
GetCommState 用给定通信设备的当前控制设备填充一个DCB
GetCommTimeouts 检取给定通信设备上所有读、写操作的超时参数
GetCompressedFileSize 检取指定文件的压缩尺寸和磁盘的实际存贮空间,以便保存该文件

GetComputerName 检取当前计算机的名称
GetConsoleCP 检取与调用坚持有关的控制台所用输入代码页的等价内容,以便将键盘输入转换成相应的字符值
GetConsoleCursorInfo 检取指定控制台屏幕缓冲区中光标的大小和可见性
GetConsoleMode 报告控制台输入/输出缓冲区当前的输入/输出方式
GetConsoleOutputCP 检取与调用进程有关的控制台所用的输出代码页的等价内容,以便将输出函数所写入的内容转换成显示图象
GetConsoleScreenBuffreInfo 检取指定控制台屏幕缓冲区的信息
GetConsoleTitle 检取当前控制台窗口的标题栏的字符串
GetCPInfo 检取有关任意合法的已被安装或可用的代码页值
GetCurrencyFormat 把指定地点的数字串格式化为通用字符串
GetCurrentDirectory 检取当前进程的当前目录
GetCurrentProcess 检取当前进程的伪句柄
GerCurrentProcessId 检取调用进程的标识符
GetCurrentThread 检取当前进程的伪句柄
GetCurrentTreadId 检取当前调用进程的标识符
GetDateFormat 以指定地点格式把日期数值变为日期字符串
GetDefaultCommConfig 检取通信设备的缺省配置
GetDiskFreeSpace 检取通信设备的缺省配置

GetDriveType 确定磁盘驱动器是否是可移动的、固定的、CDROM、RAM磁盘或网络驱动器
GetEnvironmentStings 返回当前进程的环境块地址
GetEnvironmentVariable 从调用进程的环境块中检取指定变量的值
GetExitCodeProcess 检取指定进程的终止状态
GetExitCodeThread 检取指定进程的终止状态
GetFileAttribtes 检取指定文件的属性
GetFileInformationByHandle 检取指定文件的有关信息
GetFileSize 检取指定文件的大小
GetFileTime 检取指定文件被创建、最后一次被访问和最后一次被修改的日期和时间
GetFileType 返回指定文件的类型
GetFullPathName 检取指定文件的全路径和文件名
GetHandkeInformation 检取指定对象句柄某种属性的信息
GetLargestConsoleWindowSize 根据当前字体和显示器大小,返回最大可能的控制台窗口的大小
GetLastError 返回最近的错误代码
GetLocaleInfoW 通过查询记录来检取一事件发生地点的信息
GetLocalTime 检取当前局部时间和日期
GetLogicalDrives 返回表示当前可用磁盘驱动器的位屏蔽
GetLogicalDriveStrings 检取指定的系统的合法驱动器的字符串
GetMailslotInfo 检取给定邮件槽的信息
GetModuleFileName 检取包含指定模块的可执行文件的全路径和文件名
GetModuleHandle 返回指定模块的句柄

GetNamedPipeHandleState 检取指定有名管道的状态
GetNamedPipeInfo 检取给定有名管道的信息
GetNumberFormat 把一个数字串定制成指定地点的的数字串格式
GetNumberOfConsoleInputEvents检取控制台输入缓冲区中未读取的输入记录数
GetNumberOfConsoleMouseButtons检取当前控制台所用鼠标的按扭数
GetOEMCP 检取系统的OEM代码页标识符
GetOverlappedResult 返回在指定文件、有名管道或通信设备上的一次重叠操作的结果
GetPriorityClass 返回给定进程的优先级
GetPrivateProfileInt 检取初始化文件中与指定段某个关键字相关的整数
GetPrivateProfileSection 从给定的初始化文件中检取指定段的所有关键字和值
GetPrivateProfileSectionNames在一个初始化文件中检取所有段的名称,它是为兼容16位WINDOWS应用程序提供的
GetPrivateProfileString 从给定初始化文件的指定段中检取一字符串
GetPrivateProfileStruct 在给定的初始化文件的段中检取指定关键字数据
GetProcAddress 返回指定的输出动态链接库函数的地址
GetProcessAffinityMask 检取调用进程或系统用到的处理器数
GetProcessHeap 获取调用进程的堆句柄
GetProcessHeaps 获取调用进程所有有效堆的句柄

GetProcessShutdownParameters 检取当前调用进程的关机参数
GetProcessTimes 检取调用进程的计时信息
GetProcessVersion 获取指定进程期望运行WINDOWS版本的主、次版本号
GetProcessworkingsetSize 获取指定进程工作集的最小和最大值
GetProfileInt 从WIN.INI文件的指定段中检取指定键名的整数值
GetProfileSection 检取WIN.INI文件中指定段的所有关键字和值
GetProfileString 检取WIN.INI文件中与指定段内的指定关键字相关的字符串
GetQueuedCompletionStatus 从指定的I/O完成端口里出队一个I/O完成信息包若无完成信息包队列,则等待挂起的I/O操作完成直到能出队一个

完成信息包或限时已过才返回
GetShortPathName 检取文件的短路径名
GetStartupInfo 检取STARTUPINFO结构的内容,该结构在创建调用进程时指定
GetSteHandle 返回标准输入/输出或错误设备句柄
GetStringTypeA 返回指定字符串的字符类型信息
GetStringTypeEx 返回指定字符串的字符类型信息
GetStringTypeW 返回一个Unicode串的字符类型信息
GetSystemDefaultLangID 检取系统缺省语言标识符
GetSystemDefaultLCID 检取系统缺省地点标识符
GetSystemDirectory 检取WINDOWS系统目录SYSTEM所在路径
GetSystemInfo 返回当前系统的有关信息

GetSystenPowerStatus 返回系统电源状态以确定系统使用AC还是DC电源、电池是否正在充电以及有多少电池可用
GetSystemTime 检取当前系统的日期和时间
GetSystemTimeAdjustment 确定系统是否在每个时钟中断应用时间调整值调整一天时间
GetSystemTimeAsfileTime 检取当前系统的日期和时间
GetTapeParameters 检取描述磁带和磁带驱动器的信息
GetTapePosition 检取磁带的地址
GetTapeStatus 检取磁带设备是否准备好处理磁带命令
GetTempFileName 用指定的模式创建一个临时文件名
GetTempPath 检取为临时文件指定的目录路径
GetThreadContext 检取指定线程的描述表
GetThreadLocale 返回当前线程的当前位置
GetThreadPriority 返回给定线程的优先值

GetThreadSelectorEntry 检取指定选择符和线程的描述符表表项

 GetThreadTimes 检取当前线程的计时信息

GetTickCount 检取WINDOWS启动以来所经历的毫秒数
GetTimeFormat 把时间值格式化成指定地点的时间字符串
GetTimeZoneInfomation 检取当前的时间区参数
GetUserDefaultLangID 检取用户缺省语言标识符
GetUsetDefaultLCID 检取用户缺省地点标识符
GetVersion 返回WINDOWS的当前版本号

GetVersionEx 获取当前运行的操作系统版本的扩展信息
GetVolumeInfomation 返回有关指定的根目录文件系统的信息
GetWindowsDirectory 返回WINDOWS目录的路径
GlobalAddAtom 将一个字符串添加到全局原子表中,并返回标识此字符的值
GlobalAlloc 从堆中分配指定数目的字节
GlobalCompact 通过压缩产生全局自由内存
GlobalDeleteAtom 将全局字符串原子的引用数减一
GlobalFindAtom 在全局原子表中查找指定字符串,并检取与该字符串相关的全局原子
GlobalFix 在线形内存锁定一个全局内存对象
GlobalFlags 返回有关指定的全局内存对象信息
GlobalFree 释放指定的全局内存对象,并使其句柄无效
GlobalGetAtomName 检取与指定全局原子相关的字符串的一份拷贝
GlobalHandle 检取与指定的全局内存块指针相关的句柄
GlobalLock 加锁一个全局内存对象,并返回指向此对象内存块中第一字节的指针
GlobalMemoryStatus 检取当前可用内存信息
GlobalReAlloc 改变指定的全局内存对象的大小或属性
GlobalSize 检取指定的全局内存对象的大小
GlobalUnfix 在线形内存中解锁一个全局内存对象
GlobalUnlock 将一个以GMEM_MOVEABLE标志分配的内存对象的加锁计数值减1
GlobalUnWire 解锁一个全局内存对象
GlobalWire 加锁一个全局内存对象
HeapAlloc 从一堆中申请分配一个内存块
HeapCompact 通过压缩堆产生更大的可用内存块

HeapCreate 创建一个为调用进程私有的堆对象
HeapDestroy 撤消指定的堆对象
HeapFree 释放利用HeapAlloc或HeapReAlloc函数从堆中分配的内存块
HeapLock 获取临界对象区域或为指定的堆加锁
HeapReAlloc 重新分配堆中一个内存块
HeapSize 返回利用HeapAlloc或HeapReAlloc函数从堆中分配的内存快的大小
HeapUnlock 释放临界对象区域或一个已加锁的堆
HeapValidate 使指定的堆有效
HeapWalk 枚举在指定堆里的内存块数
hread 从指定文件中读数据
hwrite 向指定文件写数据
View Code

 

win32api

http://www.esk365.com/zxsc/prg/winapia/

.NET Windows服务在ntdll.dll中崩溃

.NET Windows服务在ntdll.dll中崩溃

我有用C#编写的Windows服务。 它调用第三方COM组件时会崩溃。 该问题只出现在Windows 7(x86和x64)上。 当我运行与Windows 7(x86和x64)上的控制台应用程序相同的服务代码时,它工作正常。

当我在Windows 2003上运行相同的服务时,它也能正常工作。 我认为这可能与UAC有关。 我正在寻找关于debugging此服务的build议/方向,以确定是什么导致了问题。 使用ntdll.dll的debugging符号? 在事件日志的信息下方。

事件ID:1000,级别:错误

错误应用程序名称:ServiceHost.exe,版本:1.0.0.0,时间戳:0x4f87bc9a

进程崩溃时,操作系统是否刷新cpucaching?

我可以使用什么工具来捕获导致应用程序崩溃的所有input?

NTDLL!kifastsystemcallret

速率过高时检测到httperf缓冲区溢出

铿锵声在Windows 7 64位崩溃

错误模块名称:ntdll.dll,版本:6.1.7601.17725,时间戳:0x4ec49b60

exception代码:0xc0000005

故障偏移量:0x0002bcbb

错误进程ID:0x151c

错误应用程序开始时间:0x01cd1939c9017b2d

错误的应用程序path:E: ServiceHost bin Debug ServiceHost.exe

错误模块path:C: Windows SYstem32 ntdll.dll

报告ID:08da6aa3-852d-11e1-a889-00155d016f32

MysqL在MysqL上崩溃

当用_O_U8TEXT处理unicode时使用setmode时,C ++崩溃

尝试使用WinDbg分析转储文件:PEB已分页,不会加载符号

简单的C代码编译,但input时崩溃

exec如何改变执行程序的行为

疯狂的猜测,你可能会受到Session 0 Isolation的影响 :

在WindowsXP®,Windowsserver®2003及更早版本的Windows®操作系统中,所有服务都与第一个登录到控制台的用户在同一个会话中运行。 此会话称为会话0.在会话0中一起运行服务和用户应用程序会带来安全风险,因为服务以提升的权限运行,因此是寻求提升其自身权限级别的恶意代理程序的目标。

如果这通常会导致服务问题,例如,如果有东西试图创建用户界面。

处理这个问题的最简单的方法是与第三方组件的供应商交谈,并确保它支持与服务一起使用。 但是,如果供应商不再存在,那可能是不可能的。

如果服务运行时出现这个问题,可能会附加一个调试器,并在发生错误的地方捕获一个转储(例如,使用诸如windows调试工具的adplus之类的东西)。 如果在服务启动期间发生问题,诊断可能会更棘手。

你真的需要隔离代码中导致错误的最后一个函数调用,然后尝试从那里进行诊断。

尝试将服务的帐户更改为任何其他帐户。 像Local System一样。

第三方COM组件正在使用一些黑客(一些不释放的API)来提高其性能,并且在Windows上的下一个版本中, OS界面已经被改变,恕不另行通知。

这是从早期的Windows(诺顿,办公室…),直接调用内核的旧政策… …

c – ntdll.dll [下面的框架可能不正确/缺失,没有为ntdll.dll加载符号]

c – ntdll.dll [下面的框架可能不正确/缺失,没有为ntdll.dll加载符号]

几个星期以来,我遇到了这种情况,非常令人沮丧,

我的程序调试非常好,没有错误,当我运行程序时,它执行的初始部分
作业,几秒后它终止到’break continue’选项,并在调用堆栈中看一看,结果证明它是来自ntdll.dll和msvcr100d.dll的错误
它似乎与Windows相关的SDK问题,它似乎也是一个糟糕的指针.
我无论如何都无法控制这一点.
我安装了Windows SDK到7.0但似乎没有任何改变,

使用:Windows 7 64位,Boost 1.48,Visual Studio编译器(完整版),openCV2.3,c.

我尝试了很多选择,

例如.转到任务管理器,右键单击devenv.exe并在“set affinity”中只选择一个
重新安装Windows SDK,
重新安装我自己的项目几次.

什么都没有帮助我,有人可以建议我一个很好的解决方案.

为了更清楚,这是我的调用堆栈

ntdll.dll!77e615de()    
[Frames below may be incorrect and/or missing,no symbols loaded for ntdll.dll] 
ntdll.dll!77e615de()    
ntdll.dll!77e5014e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
kernel32.dll!770012ea()     
kernel32.dll!77001314()     
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77e9b459()    
ntdll.dll!77e9b42b()    
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::clear()  Line 1415  C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,0> >::erase(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<CBoWMatch<int>,0> > > _First,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<CBoWMatch<int>,0> > > _Last)  Line 1383 C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,0> >::_Tidy()  Line 1866 + 0x5d bytes C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,0> >::~_Tree<std::_Tset_traits<CBoWMatch<int>,0> >()  Line 792 C++
bowExample.exe!std::set<CBoWMatch<int>,128> >::~set<CBoWMatch<int>,128> >()  + 0x2b bytes   C++
bowExample.exe!set2<CBoWMatch<int>,128> >::~set2<CBoWMatch<int>,128> >()  + 0x63 bytes  C++
bowExample.exe!set2<CBoWMatch<int>,128> >::`scalar deleting destructor'()  + 0x2b bytes   C++
bowExample.exe!boost::checked_delete<set2<CBoWMatch<int>,128> > >(set2<CBoWMatch<int>,128> > * x)  Line 34 + 0x2b bytes C++
bowExample.exe!boost::scoped_ptr<set2<CBoWMatch<int>,128> > >::~scoped_ptr<set2<CBoWMatch<int>,128> > >()  Line 80 + 0xb bytes  C++
bowExample.exe!bowTest(CBoWIMUParams & BOWIMUParaMS)  Line 192 + 0xf bytes  C++
bowExample.exe!main(int argc,char * * argv)  Line 225 + 0xc bytes  C++
bowExample.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes   C
bowExample.exe!mainCRTStartup()  Line 371   C
kernel32.dll!7700339a()     
ntdll.dll!77e79ef2()    
ntdll.dll!77e79ec5()

这是加载符号后的调用堆栈

ntdll.dll!_ZwRaiseException@12()  + 0x12 bytes  
ntdll.dll!_ZwRaiseException@12()  + 0x12 bytes  
msvcr100d.dll!__getptd_noexit()  + 0xae bytes   

bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,128> > >()  Line 80 + 0xb bytes  C++
bowExample.exe!bowTest(CBoWIMUParams & BOWIMUParaMS)  Line 193 + 0xf bytes  C++
bowExample.exe!main(int argc,char * * argv)  Line 216 + 0xc bytes  C++
bowExample.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes   C
bowExample.exe!mainCRTStartup()  Line 371   C
kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes

解决方法

右键单击包含ntdll.dll的堆栈行(在堆栈跟踪中)并从Microsoft服务器加载调试符号(从…加载符号),然后堆栈跟踪可能会稍微改变一下.使用未定义的符号对每个dll重复该操作.

在下载调试符号之前,您可能正在查看错误的堆栈跟踪.

c – 在windbg中,如何在kernel32.dll中的所有函数上设置断点?

c – 在windbg中,如何在kernel32.dll中的所有函数上设置断点?

我想找出kernel32.dll的调用序列和函数
在example.DLL中的函数example()中.

在windbg中,如何在kernel32.dll中的所有函数上设置断点?

我试过bm kernel32!*,但似乎不行.

解决方法

我不会像上述那样做.当然有可能,但如果用bm / a kernel32!*完成,你无意中也会在数据符号上设置bps(而不是实际函数).在您的情况下,wt – trace和监视数据(您可以在随windbg包提供的debugger.chm中查找)可能就是您所追求的.

我们今天的关于您好世界与Windows下的直接系统调用 没有ntdll.dll,kernel32.dll,…任何解决scheme?的分享已经告一段落,感谢您的关注,如果您想了解更多关于(54) C# 调用 kernel32.dll、.NET Windows服务在ntdll.dll中崩溃、c – ntdll.dll [下面的框架可能不正确/缺失,没有为ntdll.dll加载符号]、c – 在windbg中,如何在kernel32.dll中的所有函数上设置断点?的相关信息,请在本站查询。

本文标签: