• win32asm FS段寄器


    .386
      .model  flat,stdcall
      option  casemap  :none

      include    e:\masm32\include\windows.inc
      include    e:\masm32\include\user32.inc
      includelib  e:\masm32\lib\user32.lib
      include    e:\masm32\include\kernel32.inc
      includelib  e:\masm32\lib\kernel32.lib
      .const

      .data
        szT    db  'Title',0
        szY    db  'You Are Passed',0
        szN    db  'I Find U',0
      .code
    start:
      assume fs:Nothing
      Mov eax,fs:18h;teb地址
      mov eax,[eax+30h];peb地址
      mov eax,[eax+68h];peb结构里的GlobalFlag
      .if eax!=0
     invoke MessageBox,NULL,addr szN,addr szT,MB_OK
      .else
     invoke MessageBox,NULL,addr szY,addr szT,MB_OK
      .endif
     
      invoke  ExitProcess,0
      
    end  start

     

    FS寄存器指向当前活动线程的TEB结构(线程结构)
    偏移 说明
    000 指向SEH链指针
    004 线程堆栈顶部
    008 线程堆栈底部
    00C SubSystemTib
    010 FiberData
    014 ArbitraryUserPointer
    018 FS段寄存器在内存中的镜像地址
    020 进程PID
    024 线程ID
    02C 指向线程局部存储指针
    030 PEB结构地址(进程结构)
    034 上个错误号


    得到KERNEL32.DLL基址的方法
    assume fs:nothing ;打开FS寄存器
    mov eax,fs:[30h] ;得到PEB结构地址
    mov eax,[eax + 0ch] ;得到PEB_LDR_DATA结构地址
    mov esi,[eax + 1ch] ;InInitializationOrderModuleList
    lodsd ;得到KERNEL32.DLL所在LDR_MODULE结构的InInitializationOrderModuleList地址
    mov edx,[eax + 8h] ;得到BaseAddress,既Kernel32.dll基址

     

  • 相关阅读:
    学习进度14
    学习进度13
    学习进度12
    2020.12.01 表单元素
    2020.12.02 表单属性
    2020.12.04
    2020.12.06
    2020.12.07
    2020.12.08 URL
    2020.12.09
  • 原文地址:https://www.cnblogs.com/mokliu/p/2138863.html
Copyright © 2020-2023  润新知