亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pe-tut6.html

?? 在DOS下編程因為實模式的限制
?? HTML
?? 第 1 頁 / 共 4 頁
字號:
            invoke MessageBox, 0, 
  addr FileMappingError, addr AppName, MB_OK+MB_ICONERROR <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke CloseHandle,hMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;.else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox, 0, addr FileOpenMappingError, 
  addr AppName, MB_OK+MB_ICONERROR <br>
  &nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp; invoke CloseHandle, hFile <br>
  &nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;invoke MessageBox, 0, addr FileOpenError, addr AppName, MB_OK+MB_ICONERROR 
  <br>
  &nbsp;&nbsp; .endif <br>
  &nbsp;.endif <br>
  &nbsp;ret <br>
  ShowImportFunctions endp <br>
  <br>
  AppendText proc hDlg:DWORD,pText:DWORD <br>
  &nbsp;&nbsp; invoke SendDlgItemMessage,hDlg,IDC_EDIT,EM_REPLACESEL,0,pText <br>
  &nbsp;&nbsp; invoke SendDlgItemMessage,hDlg,IDC_EDIT,EM_REPLACESEL,0,addr CRLF 
  <br>
  &nbsp;&nbsp; invoke SendDlgItemMessage,hDlg,IDC_EDIT,EM_SETSEL,-1,0 <br>
  &nbsp;&nbsp;&nbsp;ret <br>
  AppendText endp <br>
  <br>
  RVAToOffset PROC uses edi esi edx ecx pFileMap:DWORD,RVA:DWORD <br>
  &nbsp;&nbsp; mov esi,pFileMap <br>
  &nbsp;&nbsp; assume esi:ptr IMAGE_DOS_HEADER <br>
  &nbsp;&nbsp; add esi,[esi].e_lfanew <br>
  &nbsp;&nbsp; assume esi:ptr IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov edi,RVA ; edi == RVA <br>
  &nbsp;&nbsp; mov edx,esi <br>
  &nbsp;&nbsp; add edx,sizeof IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov cx,[esi].FileHeader.NumberOfSections <br>
  &nbsp;&nbsp; movzx ecx,cx <br>
  &nbsp;&nbsp; assume edx:ptr IMAGE_SECTION_HEADER <br>
  &nbsp;&nbsp; .while ecx>0 ; check all sections <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .if edi>=[edx].VirtualAddress <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov eax,[edx].VirtualAddress <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add eax,[edx].SizeOfRawData <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if edi&lt;eax ; The address is in this 
  section <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov eax,[edx].VirtualAddress 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub edi,eax<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov eax,[edx].PointerToRawData 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add eax,edi ; eax == file offset 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add edx,sizeof IMAGE_SECTION_HEADER <br>
  &nbsp;&nbsp;&nbsp;&nbsp; dec ecx <br>
  &nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp; assume edx:nothing <br>
  &nbsp;&nbsp; assume esi:nothing <br>
  &nbsp;&nbsp; mov eax,edi <br>
  &nbsp;&nbsp; ret <br>
  RVAToOffset endp <br>
  <br>
  ShowTheFunctions proc uses esi ecx ebx hDlg:DWORD, pNTHdr:DWORD <br>
  &nbsp;&nbsp; LOCAL temp[512]:BYTE <br>
  &nbsp;&nbsp; invoke SetDlgItemText,hDlg,IDC_EDIT,0 <br>
  &nbsp;&nbsp; invoke AppendText,hDlg,addr buffer <br>
  &nbsp;&nbsp; mov edi,pNTHdr <br>
  &nbsp;&nbsp; assume edi:ptr IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov edi, [edi].OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY].VirtualAddress 
  <br>
  &nbsp;&nbsp; invoke RVAToOffset,pMapping,edi <br>
  &nbsp;&nbsp; mov edi,eax <br>
  &nbsp;&nbsp; add edi,pMapping <br>
  &nbsp;&nbsp; assume edi:ptr IMAGE_IMPORT_DESCRIPTOR <br>
  &nbsp;&nbsp; .while !([edi].OriginalFirstThunk==0 && [edi].TimeDateStamp==0 
  && [edi].ForwarderChain==0 && [edi].Name1==0 && [edi].FirstThunk==0) <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr ImportDescriptor <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping, [edi].Name1 <br>
  &nbsp;&nbsp;&nbsp;&nbsp; mov edx,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add edx,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf, addr temp, addr IDTemplate, [edi].OriginalFirstThunk,[edi].TimeDateStamp,[edi].ForwarderChain,edx,[edi].FirstThunk 
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr temp <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .if [edi].OriginalFirstThunk==0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esi,[edi].FirstThunk <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esi,[edi].OriginalFirstThunk 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping,esi <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add eax,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp; mov esi,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr NameHeader <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .while dword ptr [esi]!=0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test dword ptr [esi],IMAGE_ORDINAL_FLAG32 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz ImportByOrdinal <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping,dword ptr [esi] 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add edx,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assume edx:ptr IMAGE_IMPORT_BY_NAME <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov cx, [edx].Hint <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx ecx,cx <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf,addr temp,addr NameTemplate,ecx,addr 
  [edx].Name1 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp ShowTheText <br>
  ImportByOrdinal: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,dword ptr [esi] <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and edx,0FFFFh <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf,addr temp,addr OrdinalTemplate,edx 
  <br>
  ShowTheText: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr temp <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add esi,4 <br>
  &nbsp;&nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp;&nbsp; add edi,sizeof IMAGE_IMPORT_DESCRIPTOR <br>
  &nbsp; .endw <br>
  &nbsp;&nbsp;ret <br>
  ShowTheFunctions endp <br>
  end start </font></p>
<h3><font face="Arial, Helvetica, sans-serif">Analysis:</font></h3>
<p><font face="MS Sans Serif" size="-1">The program shows an open file dialog 
  box when the user clicks Open in the menu. It verifies that the file is a valid 
  PE and then calls <font color="#CC9900"><b>ShowTheFunctions</b></font>.</font></p>
<p><font face="Fixedsys">ShowTheFunctions proc uses esi ecx ebx hDlg:DWORD, pNTHdr:DWORD 
  <br>
  &nbsp;&nbsp; LOCAL temp[512]:BYTE </font></p>
<p><font face="MS Sans Serif" size="-1">Reserve 512 bytes of stack space for string 
  operation.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp; invoke SetDlgItemText,hDlg,IDC_EDIT,0 </font></p>
<p><font face="MS Sans Serif" size="-1">Clear the text in the edit control</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp; invoke AppendText,hDlg,addr buffer </font></p>
<p><font face="MS Sans Serif" size="-1">Insert the name of the PE file into the 
  edit control. <font color="#CC9900"><b>AppendText </b></font>just sends <font color="#CCFFCC"><b>EM_REPLACESEL 
  </b></font> messages to append the text to the edit control. Note that it sends 
  <font color="#CCFFCC"> <b>EM_SETSEL</b></font> with wParam=-1 and lParam=0 to 
  the edit control to move the cursor to the end of the text.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp; mov edi,pNTHdr <br>
  &nbsp;&nbsp; assume edi:ptr IMAGE_NT_HEADERS <br>
  &nbsp;&nbsp; mov edi, [edi].OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY].VirtualAddress 
  </font></p>
<p><font face="MS Sans Serif" size="-1">Obtain the RVA of the import symbols. 
  edi at first points to the PE header. We use it to go to the 2nd member of the 
  data directory array and obtain the value of VirtualAddress member.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp; invoke RVAToOffset,pMapping,edi <br>
  &nbsp;&nbsp; mov edi,eax <br>
  &nbsp;&nbsp; add edi,pMapping </font></p>
<p><font face="MS Sans Serif" size="-1">Here comes one of the pitfalls for newcomers 
  to PE programming. Most of the addresses in the PE file are RVAs and <font color="#FF6666"><b>RVAs 
  are meaningful only when the PE file is loaded into memory by the PE loader</b></font>. 
  In our case, we do map the file into memory but not the way the PE loader does. 
  Thus we cannot use those RVAs directly. Somehow we have to convert those RVAs 
  into file offsets. I write RVAToOffset function just for this purpose. I won't 
  analyze it in detail here. Suffice to say that it checks the submitted RVA against 
  the starting-ending RVAs of all sections in the PE file and use the value in 
  <font color="#FFFFCC"> <b>PointerToRawData</b></font> field in the <font color="#CCFFCC"><b>IMAGE_SECTION_HEADER</b></font> 
  structure to convert the RVA to file offset.<br>
  To use this function, you pass it two parameters: the pointer to the memory 
  mapped file and the RVA you want to convert. It returns the file offset in eax. 
  In the above snippet, we must add the pointer to the memory mapped file to the 
  file offset to convert it to virtual address. Seems complicated, huh? :)</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp; assume edi:ptr IMAGE_IMPORT_DESCRIPTOR 
  <br>
  &nbsp;&nbsp; .while !([edi].OriginalFirstThunk==0 && [edi].TimeDateStamp==0 
  && [edi].ForwarderChain==0 && [edi].Name1==0 && [edi].FirstThunk==0) </font></p>
<p><font face="MS Sans Serif" size="-1">edi now points to the first <font color="#CCFFCC"><b>IMAGE_IMPORT_DESCRIPTOR</b></font> 
  structure. We will walk the array until we find the structure with zeroes in 
  all members which denotes the end of the array.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr 
  ImportDescriptor<br>
  </font><font face="Fixedsys">&nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping, 
  [edi].Name1 <br>
  &nbsp;&nbsp;&nbsp;&nbsp; mov edx,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add edx,pMapping </font></p>
<p><font face="MS Sans Serif" size="-1">We want to display the values of the current 
  <font color="#CCFFCC"> <b>IMAGE_IMPORT_DESCRIPTOR</b></font> structure in the 
  edit control. Name1 is different from the other members since it contains the 
  RVA to the name of the dll. Thus we must convert it to a virtual address first.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf, addr temp, 
  addr IDTemplate, [edi].OriginalFirstThunk,[edi].TimeDateStamp,[edi].ForwarderChain,edx,[edi].FirstThunk 
  &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr temp </font></p>
<p><font face="MS Sans Serif" size="-1">Display the values of the current <font color="#CCFFCC"><b>IMAGE_IMPORT_DESCRIPTOR</b></font>.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp; .if [edi].OriginalFirstThunk==0 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esi,[edi].FirstThunk <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .else <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov esi,[edi].OriginalFirstThunk 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp; .endif </font></p>
<p><font face="MS Sans Serif" size="-1">Next we prepare to walk the <font color="#CCFFCC"><b>IMAGE_THUNK_DATA</b></font> 
  array. Normally we would choose to use the array pointed to by <font color="#FFFFCC"><b>OriginalFirstThunk</b></font>. 
  However, some linkers errornously put 0 in <font color="#FFFFCC"><b>OriginalFirstThunk</b></font> 
  thus we must check first if the value of <font color="#FFFFCC"><b>OriginalFirstThunk</b></font> 
  is zero. If it is, we use the array pointed to by <font color="#FFFFCC"><b>FirstThunk</b></font> 
  instead.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping,esi 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp; add eax,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp; mov esi,eax </font></p>
<p><font face="MS Sans Serif" size="-1">Again, the value in <font color="#FFFFCC"><b>OriginalFirstThunk</b></font>/<font color="#FFFFCC"><b>FirstThunk</b></font> 
  is an RVA. We must convert it to virtual address.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr 
  NameHeader</font><font face="Fixedsys"><br>
  &nbsp;&nbsp;&nbsp;&nbsp; .while dword ptr [esi]!=0 </font></p>
<p><font face="MS Sans Serif" size="-1">Now we are ready to walk the array of<font color="#CCFFCC"><b> 
  IMAGE_THUNK_DATAs</b></font> to look for the names of the functions imported 
  from this DLL. We will walk the array until we find an entry which contains 
  0.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test dword ptr 
  [esi],IMAGE_ORDINAL_FLAG32 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz ImportByOrdinal </font></p>
<p><font face="MS Sans Serif" size="-1">The first thing we do with the<font color="#CCFFCC"><b> 
  IMAGE_THUNK_DATA</b></font> is to test it against <font color="#CCFFCC"><b>IMAGE_ORDINAL_FLAG32</b></font>. 
  This test checks if the most significant bit of the<font color="#CCFFCC"><b> 
  IMAGE_THUNK_DATA</b></font> is 1. If it is, the function is exported by ordinal 
  so we have no need to process it further. We can extract its ordinal from the 
  low word of the <font color="#CCFFCC"><b>IMAGE_THUNK_DATA</b></font> and go 
  on with the next <font color="#CCFFCC"><b>IMAGE_THUNK_DATA</b></font> dword.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke RVAToOffset,pMapping,dword 
  ptr [esi] <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add edx,pMapping <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assume edx:ptr IMAGE_IMPORT_BY_NAME </font></p>
<p><font face="MS Sans Serif" size="-1">If the MSB of the IAMGE_THUNK_DATA is 
  0, it contains the RVA of IMAGE_IMPORT_BY_NAME structure. We need to convert 
  it to virtual address first.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov cx, [edx].Hint 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx ecx,cx <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf,addr temp,addr NameTemplate,ecx,addr 
  [edx].Name1 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp ShowTheText </font></p>
<p><font face="MS Sans Serif" size="-1">Hint is a word-sized field. We must convert 
  it to a dword-sized value before submitting it to wsprintf. And we print both 
  the hint and the function name in the edit control</font></p>
<p><font face="Fixedsys"> ImportByOrdinal: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,dword ptr [esi] <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and edx,0FFFFh <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf,addr temp,addr OrdinalTemplate,edx 
  </font></p>
<p><font face="MS Sans Serif" size="-1">In the case the function is exported by 
  ordinal only, we zero out the high word and display the ordinal.</font></p>
<p><font face="Fixedsys"> ShowTheText: <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke AppendText,hDlg,addr temp <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add esi,4 </font></p>
<p><font face="MS Sans Serif" size="-1">After inserting the function name/ordinal 
  into the edit control, we skip to the next <font color="#CCFFCC"><b>IMAGE_THUNK_DATA</b></font>.</font></p>
<p><font face="Fixedsys"> &nbsp;&nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp;&nbsp; add edi,sizeof IMAGE_IMPORT_DESCRIPTOR </font></p>
<p><font face="MS Sans Serif" size="-1">When all <font color="#CCFFCC"><b>IMAGE_THUNK_DATA</b></font> 
  dwords in the array are processed, we skip to the next <font color="#CCFFCC"><b>IMAGE_IMPORT_DESCRIPTOR</b></font> 
  to process the import functions from other DLLs.</font></p>
<h3><font face="MS Sans Serif" size="-1">Appendix:</font></h3>
<p><font face="MS Sans Serif" size="-1">It would be incomplete if I don't mention 
  something about bound import. In order to explain what it is, I need to digress 
  a bit. When the PE loader loads a PE file into memory, it examines the import 
  table and loads the required DLLs into the process address space. Then it walks 
  the<font color="#CCFFCC"><b> IMAGE_THUNK_DATA</b></font> array much like we 
  did and replaces the<font color="#CCFFCC"><b> IMAGE_THUNK_DATAs</b></font> with 
  the real addresses of the import functions. This step takes time. If somehow 
  the programmer can predict the addresses of the functions correctly, the PE 
  loader doesn't have to fix the<font color="#CCFFCC"><b> IMAGE_THUNK_DATAs</b></font> 
  each time the PE file is run. Bound import is the product of that idea.<br>
  To put it in simple terms, there is a utility named <font color="#FFFFCC"><b>bind.exe</b></font> 
  that comes with Microsoft compilers such as Visual Studio that examines the 
  import table of a PE file and replaces the<font color="#CCFFCC"><b> IMAGE_THUNK_DATA</b></font> 
  dwords with the addresses of the import functions.When the file is loaded, the 
  PE loader must check if the addresses are valid. If the DLL versions do not 
  match the ones in the PE files or if the DLLs need to be relocated, the PE loader 
  knows that the precomputed addresses are not valid thus it must walk the array 
  pointed to by <font color="#CCFFCC"><b>OriginalFirstThunk</b></font> to calculate 
  the new addresses of import functions.<br>
  Bound import doesn't have much significance in our example because we use OriginalFirstThunk 
  by default. For more information about the bound import, I recommmend <a href="files/pe1.zip">LUEVELSMEYER's 
  pe.txt</a>.</font></p>
<hr>
<p align="center"><font face="MS Sans Serif" size="-1"><b>[<a href="http://win32asm.cjb.net">Iczelion's 
  Win32 Assembly Homepage</a>]</b></font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产裸体歌舞团一区二区| 国产一区视频导航| 国产乱码精品一区二区三区忘忧草| 国产成人99久久亚洲综合精品| 欧美亚一区二区| 国产亚洲午夜高清国产拍精品 | 2023国产精华国产精品| 一区二区在线观看视频在线观看| 黑人巨大精品欧美一区| 欧美日韩精品一区二区天天拍小说| 久久久久久久久久久99999| 亚洲成人激情社区| 色悠悠久久综合| 中文字幕免费不卡| 国产经典欧美精品| 精品国产免费视频| 天天av天天翘天天综合网| 91影院在线免费观看| 欧美国产日韩a欧美在线观看| 精品午夜一区二区三区在线观看| 欧美日韩午夜精品| 亚洲电影第三页| 日韩不卡手机在线v区| 日韩视频一区在线观看| 粉嫩aⅴ一区二区三区四区五区| 午夜精品久久久久久久蜜桃app| 国产精品久久午夜夜伦鲁鲁| 成人a级免费电影| 久久国产视频网| 男男gaygay亚洲| 国产99久久久久久免费看农村| 日韩一区二区精品葵司在线| 欧美亚洲国产一区二区三区va| 日韩视频在线你懂得| 欧美一级爆毛片| 九色综合国产一区二区三区| 久久er99精品| xf在线a精品一区二区视频网站| 美女视频黄免费的久久| 欧美高清www午色夜在线视频| 日韩电影一二三区| 欧美一级免费观看| 激情成人午夜视频| 久久久国产综合精品女国产盗摄| 成人精品gif动图一区| 国产精品久久久久aaaa樱花 | 又紧又大又爽精品一区二区| 91国内精品野花午夜精品| 亚洲精品第1页| 欧美欧美欧美欧美首页| 美国毛片一区二区三区| 久久一二三国产| 99国产精品久久久久久久久久 | 国产精品一区免费在线观看| 91麻豆精品91久久久久久清纯| 久久综合色综合88| 99re8在线精品视频免费播放| 51午夜精品国产| 欧美日韩视频一区二区| 欧美激情一区二区三区四区| 99这里只有久久精品视频| 亚洲一区二区三区中文字幕 | 欧美日韩一区三区| 精品在线播放免费| 中文字幕国产一区| 欧美精品自拍偷拍动漫精品| 国产成人精品三级麻豆| 亚洲综合另类小说| 欧美精品一区二| 成a人片亚洲日本久久| 欧美日韩综合不卡| 久久久精品免费网站| 成人毛片视频在线观看| 亚洲成人在线免费| 欧美激情在线免费观看| 精品视频在线看| 国产大陆精品国产| 麻豆专区一区二区三区四区五区| 久久综合久色欧美综合狠狠| 色婷婷亚洲精品| 国产精品自在在线| 首页亚洲欧美制服丝腿| 国产精品福利一区| 精品美女在线观看| 欧洲国内综合视频| 成人av影视在线观看| 男人操女人的视频在线观看欧美| 亚洲欧美电影院| 久久久精品tv| 欧美精品一区二区不卡| 欧美精品久久天天躁| 99精品视频一区二区| 国产精品综合网| 久久精品国产久精国产| 欧美久久久久中文字幕| 国产精品第13页| 欧美日韩三级视频| 色综合中文字幕| 成人性视频免费网站| 伦理电影国产精品| 日韩和欧美一区二区三区| 亚洲免费观看高清完整版在线| 国产女主播一区| 久久伊人蜜桃av一区二区| 91精品国产全国免费观看| 欧美日韩精品一区二区在线播放| 色偷偷久久人人79超碰人人澡| 成人涩涩免费视频| 成人在线视频一区| 懂色av一区二区三区蜜臀| 国产在线播放一区三区四| 韩国视频一区二区| 激情久久五月天| 国产麻豆精品在线观看| 国产福利电影一区二区三区| 高清不卡在线观看| 99视频一区二区三区| 波多野结衣欧美| 91在线精品一区二区| 一本大道综合伊人精品热热| 色久优优欧美色久优优| 欧美亚洲图片小说| 欧美日韩精品系列| 91精品国产综合久久国产大片| 欧美精品色一区二区三区| 欧美区一区二区三区| 日韩一级黄色片| 久久综合五月天婷婷伊人| 国产精品久久久久久户外露出| 亚洲视频在线观看一区| 亚洲一区二区三区视频在线 | 亚洲欧美区自拍先锋| 亚洲三级视频在线观看| 亚洲一卡二卡三卡四卡五卡| 亚洲成人一区在线| 国产在线不卡一卡二卡三卡四卡| 成人动漫视频在线| 欧美日韩综合在线免费观看| 欧美xxxxx裸体时装秀| 中文字幕乱码一区二区免费| 亚洲狠狠爱一区二区三区| 免费观看91视频大全| 成人美女在线视频| 欧洲精品一区二区| 2024国产精品| 久久成人免费电影| 99精品国产热久久91蜜凸| 欧美又粗又大又爽| 久久久久免费观看| 亚洲人精品一区| 激情六月婷婷综合| 色综合久久综合网| 精品国产一区二区亚洲人成毛片| 国产精品久久久久久久久免费桃花 | 亚洲免费观看高清| 国产精品动漫网站| 在线免费视频一区二区| 欧美精品成人一区二区三区四区| 欧美三日本三级三级在线播放| 精品嫩草影院久久| 一级女性全黄久久生活片免费| 久久不见久久见免费视频1| 99久久久免费精品国产一区二区| 91精品国产品国语在线不卡| 国产精品精品国产色婷婷| 美女精品自拍一二三四| 一本大道久久a久久综合| 91麻豆精品国产91久久久资源速度| 国产日韩亚洲欧美综合| 五月天一区二区| 91在线精品一区二区| 久久精品综合网| 日本不卡视频在线| 欧美在线视频日韩| 最新国产成人在线观看| 国产精品一区2区| 久久先锋影音av鲁色资源| 日日夜夜精品视频天天综合网| aaa欧美大片| 中文字幕精品三区| 蜜桃精品在线观看| 在线综合亚洲欧美在线视频 | 欧美日韩高清在线播放| 欧美国产精品一区二区三区| 日韩高清不卡一区二区三区| 色婷婷综合久久久中文一区二区 | 久久亚洲捆绑美女| 奇米精品一区二区三区在线观看一 | 欧美精品一区二区三区高清aⅴ| 国产精品国产三级国产| 韩国三级在线一区| 337p亚洲精品色噜噜狠狠| 亚洲成在人线免费| 欧美日韩国产一级| 亚洲h精品动漫在线观看| 欧美视频一区二区| 午夜欧美2019年伦理| 正在播放亚洲一区| 美女在线观看视频一区二区| 欧美一区二区私人影院日本|