Wednesday, September 29, 2010

"Torchlight" HARDCORE mode Survival Guide



Since the light coming out of the torch has been open after the HC model, the results so far no one on No. 15's ... ...

Citie and encourage each of you special transfer, and wait for God teach = = HC

Originally posted address (there is more love comments):

http://forums.runicgames.com/viewtopic.php?f=27&t=3345

+ In Hardcore mode, just started is the most likely hang up the (actually not so difficult it = =). If you frequently in the first layer on the heroic, it can be difficult under the first pass a simple layers, and then share the items of equipment on the box (Shared Stash, cities and towns north of the box) the difficulty in leaving the No. VH (HC mode characters using a variety of difficult items can be shared).

+ Always remember to upgrade your armor, whether it is loaded with orange or enchantment to the trash. If the store which pieces of equipment, armor and equipment than you are now higher - even if only 1 point - replace. Survival is the most important thing, the output in the second.

+ To return to the city skills (Town Portal Spell) learn and quick column on the TAB, so you can quickly die when Pao Lu, breath coming against monsters - they will not return to the blood.

+ To keep valuable objects are placed to share the box, rather than ordinary storage containers - when you hang up after the characters, at least give leave under a warrior heritage.

+ After the upgrade not to attribute the whole point of causing major property investment in the last, such as Conqueror (Vanquisher) - 5 point nimble, Warlock (Alchemist) - 5 of mental exercise, spoilers (Destroyer) - 5 鐐?power. Best defense for every level rose 1 point, 2 points better.

+ Defense Specialization (Armor Proficiency) This talent is benevolent. You certainly do not fill it up, but there is absolutely nothing wrong points. Because this talent is based on a percentage of additive, so it will be very significant enhancement of armor, especially in the post.

+ Every time returning to the city, remember to buy medicine (do quests to find myrrh to drink half of the tragedy of God passing).

+ Treatment good for your pet. If you are injured trying to escape or would like to use kites tactics, a care of properly Amao / Agou Kangshang while you can. Add life to it wearing necklaces and rings, and in battle it is optimistic about the value of life (of course the most important thing is to look after their own), at any time to give it to wash down medicine 銆怲ip: hold down Shift and then use the solution銆?

+ To learn pet skills. Group therapy (Heal All) and the call is almost essential skills. The more people you bring, they have been set the less chance of fire. But calls archer (Summon Archers), please do not learn, they will only stand still with a long-range attacks, hate pitifully low. Zombie (Summon Zombies) very good, although slow points; Skull (Summon Skeleton) and the flames of the sword (Summon Flaming Sword) is not bad. (Individual or zombie feeling the best, although skeletons can take up to 5, but with only one baby, too little ... ... not to learn the reasons for the fire sword with skull)

+ Roll (KnockBack) effect is also benevolent. When you come, when directed at the enemy, with the repulse you can block them on the road (at least to what is holding them). Remember repel - conqueror of necessities, a good basin Warlock friends, spoilers little partner.

+ Lightning highest. Lightning injuries can cause a fatal blow to the scope of damage effects, used against a group huddled together in the monster could not be better (effect is very beautiful!). Highly toxic and flame properties are suitable for singling out, cold injury is holding for the time in on foot monster ... ... In short, the highest lightning.

Category: red = orange = strong recommendation to the proposed green = yellow = this, you can personal opinion the top blue =







相关链接:



MOD TO MPG



Beijing: a COMPREHENSIVE modernization of education promote capital



Fax Tools Comparison



How to convert yuv to ac3



Ping Command Usage



How to deal with the Chinese in the JSP



Photoshop Material SERIES: The Fog



World RALLY 3 cheat



MOD Converter



DAT To MP4



Operation of SUPERMARKETS to dealers Suggestions



ThinkPad First National User Conference held in Beijing



Pan On Why OO + object-oriented multi-layer structure [2]



Directory Audio CD Burners



MSN also has "never gone" fixed base



Saturday, September 25, 2010

Listen to the voice of chaos


The early 70s of this century, Princeton University ecologist R 路 May the law in the breeding of insect groups, made a famous model: 蠂 [n +1] = k * 蠂 [n] * (1-蠂 [n ])


Where 蠂 [n] n behalf of the group, said the first number. When given an initial 蠂 [0] value, and then kept iteration, it was found with different k values to obtain the sequence 蠂n There are many interesting phenomena. When the k value is between 0 and 1 when, 蠂 [n] after a certain number of iterations have tended to 0. When the k value is between 1 and 3 hours tend to 1 / k, when k is greater than 3, after a certain number of iterative 蠂 [n] alternate between the two values change, k value increased to 3.449 near the change in value has become the turn 4. Continue to increase the k value, 蠂 [n] the number of alternate values by 4 鈫?8 鈫?16 鈫?32 in the order of the rapid doubling, and finally a chaos. But when the k value of 3.835 near, after a certain number of iterations, 蠂 [n] is simply alternating between the three values change rapidly followed by 3 鈫?6 鈫?12 of the order of rapid growth. So repeatedly, in a simple equation hides surprising complexity. 蠂 [n] with k changes as shown below:

To reflect this complex into the infinite mystery, the following small programs written using TC2.0 with 蠂 [n] size to control the PC speaker sound frequency, set different k values, we can listen to the voice of Chaos .
# Include
# Include
銆??main(){
銆??int fMin=20,fMax=16000; /锛奻Min浠h〃鏈?綆棰戠巼锛宖Max浠h〃鏈?珮棰戠巼锛?
銆??int fDis,i,j; /锛奻Dis浠h〃鏈?珮棰戠巼鍜屾渶浣庨鐜囦箣闂寸殑宸?锛?
銆??/锛奿,j鐢ㄤ簬寰幆璁版暟锛?
銆??float x=0.1,k; /锛妜浠h〃x[n]鐨勫ぇ灏忥紝璁惧畾鍏跺垵濮嬪?涓?.1锛屽嵆x[0]=0.1锛?
銆??fDis=fMax锛峟Min;
銆??for(j=1;;j锛嬶紜){
銆??printf("Please input The value of k(1锛?.0)n"); /锛婅緭鍏鍊硷紛/
銆??printf("If you want to quit,Please input:0n"); /锛婂鏋渒=0閫?嚭锛?
銆??scanf("锛協",锛唊);
銆??if (k==0) break;
銆??for(i=1;i<100;i锛嬶紜) /锛婂幓闄ゅ紑濮嬬殑100涓偣锛?
銆??x=k锛妜锛?1锛峹);
銆??for (i=1;i<100;i锛嬶紜){
銆??x=k锛妜锛?1锛峹); /锛婅绠梮鐨勫?锛?
銆??sound(x锛奻Dis锛?0); /锛婄敤x鐨勫?鎺у埗PC鍠囧彮鐨勫彂闊抽鐜囷紛/
銆??delay(1000); }
銆??nosound(); }}
銆??鎵ц涓婇潰鐨勫皬绋嬪簭鏃讹紝k鍊煎氨鐩稿綋浜庝竴涓?璋冮煶鏃嬮挳鈥濄?褰撳皢k鍊艰瀹氬湪1涓?涔嬮棿鏃讹紝鍠囧彮閲屼紶鍑虹殑鍙湁涓?釜闊宠皟锛岄噸澶嶅張鐑︿汉銆傚綋k鍊肩◢绋嶅ぇ浜?鏃讹紝渚垮紑濮嬫湁浜嗛煹寰嬶細so锛峬i锛峴o锛峬i鈥︺?k鍊煎鍔犲埌3.449鏃讹紝鍙樻垚浜唖o锛峟a锛峫a锛峬i锛峴o锛峟a锛峫a锛峬i鈥︼紝鍐嶅鍔爇鍊硷紝闊靛緥鏇村姞澶嶆潅锛岀粓浜庢垚浜嗙幇浠f娊璞℃淳浣滄洸瀹剁殑闊充箰浣滃搧銆備絾鏄煹寰嬪苟涓嶆槸闅忕潃k鍊肩殑澧炲姞鏃犻檺鍦板鏉備笅鍘汇?鍦╧鍊煎鍔犲埌3.835鏃讹紝闊宠皟鍙堝彉鎴愪簡mi锛峴o锛峵i锛峬i锛峴o锛峵i鈥︼紝鍐嶅鍔爇鍊煎張杩呴?鍦板彉寰楁洿鍔犲鏉傘?
涓嶅仠鍦版敼鍙榢鍊硷紝浠旂粏鑱嗗惉锛屼細鍚埌娣锋矊涓殑鏃犻檺濂ュ銆?br />





相关链接:



Comment Download MANAGERS



XviD to MP4



Servlet With MIDlet activation



Fireworks Produced Hidden Color Photo



M2TS to MKV



Make Rootfs problem records



Inventory And Barcoding Storage



Photoshop Production - wire and spark



Cottage In China



YouTube Expected Profit Model



Internet Conference Participants Will Be



RUP anti-pattern



Essays On CMMI [1]



MKV to Zune



Tencent no winner already had three INCIDENTS



Tuesday, September 14, 2010

The first part of the Win32 debugging API


In this tutorial we will learn Win32 available to developers for debugging in the original language. At the end of tutorial we will learn how to debug a process.
Download example program.

Theory:
Win32 for programmers to use some API, which provides the equivalent function of the debugger. They were called the Win32 debugging API (or original language). Use the API, we can:

Load a program or bundled into a running program for debugging on
Obtained by low-level debugging of the program information, such as process ID, enter the address, the image base address and so on.
When the incident occurred and when debugging the notice, such as process / thread start / end, DLL loading / discharge, etc..
Modify the debugging process or thread
In short, we can use the API to write a simple debugger. As some of this subject is too large, I divide it into several parts, but this tutorial is the first part of it. In this tutorial, I will explain some of basic concepts and the general framework of the Win32 debugging API.
Use the Win32 debugging API, the following steps:

Create a process or tied to a running processes. This is the first step in using the Win32 debugging API. As our program to play the role of the debugger, we find a program for debugging. A program being debugged is called To debuggee. can be obtained in two ways debuggee:
Created by CreateProcess debuggee process. In order to create a process being debugged, you must specify DEBUG_PROCESS flag. This flag tells Windows that we want to debug the process. Debuggee occur when important events related with the debug (debug event), Windows will give us The program sends notification. debuggee immediately suspended to wait for our program ready. If debuggee also created a child process, Windows will for each child in the process of debugging events to send notification to our programs. This feature is usually not necessary. we can specify a combination of signs DEBUG_PROCESS DEBUG_ONLY_THIS_PROCESS and to ban it.
We can also use the DebugActiveProcess flag tied to a running processes.
Waiting for debug events. Debuggee process in obtaining a post, debuggee the main thread is suspended, the situation will continue to call WaitForDebugEvent up our procedures. WaitForXXX this function and other similar functions, for example, it blocks the calling thread until waiting for events. For this function, it wait for Windows to send debug events from the. Here is its definition:
WaitForDebugEvent proto lpDebugEvent: DWORD, dwMilliseconds: DWORD

lpDebugEvent is the address of a DEBUG_EVENT this structure will be filled on the debuggee debug events that occur in the information.

dwMilliseconds the function to wait for debugging events of the time, in milliseconds. If there is no time to debug the incident, WaitForDebugEvent return to the caller. On the other hand, if the parameter is designated as INFIN99vE constant, the function will have to wait until the debug events .

Now we look at DEBUG_EVENT structure.

DEBUG_EVENT STRUCT
dwDebugEventCode dd?
dwProcessId dd?
dwThreadId dd?
u DEBUGSTRUCT <>
DEBUG_EVENT ENDS

dwDebugEventCode The value specifies the wait events occurred in the type of debugging. because there are many types of events occur, our procedure to check the value, know the type of events and respond. The value of the possible values are as follows:

Value meaning
CREATE_PROCESS_DEBUG_EVENT process is created. When debuggee process has just been created (not running) or our program just to DebugActiveProcess tied to a process running when the event occurs. This is our procedure should be the first event.
EX99v_PROCESS_DEBUG_EVENT process exit.
CREATE_THEAD_DEBUG_EVENT When a new thread is created in deuggee process or our program to run in the first binding event occurs during the process. It should be noted that when debugge the main thread is created will not receive the notice.
EX99v_THREAD_DEBUG_EVENT debuggee the thread exit event. Debugee exit the main thread does not receive the notice. We believe that the main thread and debugge debuggee process is synonymous. So when we see CREATE_PROCESS_DEBUG_EVENT signs the procedure, the main thread it is CREATE_THREAD_DEBUG_EVENT logo.
LOAD_DLL_DEBUG_EVENT debuggee into a DLL. When the PE loader DLL first decomposition point to a link, we will receive the event. (When you call CreateProcess into debuggee time) and when debuggee also occurs when calling LoadLibrary.
UNLOAD_DLL_DEBUG_EVENT a DLL is unloaded from debuggee events.
EXCEPTION_DEBUG_EVENT in debuggee abnormal events occur. Note: This event is only the beginning in debuggee took place before the first instruction of its time. Exception is actually a debug interrupt (int 3h). If you want to restore debuggee things to DBG_CONTINUE signs calling ContinueDebugEvent function. Do not use the logo or debuggee DBG_EXCEPTION_NOT_HANDLED refuse to run in the NT (Win98 to run well).
OUTPUT_DEBUG_STRING_EVENT when debuggee DebugOutputString function call to send a message to our string when the event occurs.
RIP_EVENT system debugging error

dwProcessId and dwThreadId debug the course of events took place and thread Id. We can use these values as we are interested in the process or thread identifier. Remember, if we use CreateProcess to load debuggee, we can get debuggee in PROCESS_INFO the process of structural and thread. We can use these values to different debug event occurred in debuggee in the process or its children (if not specified DEBUG_ONLY_THIS_PROCESS signs).

u is a joint, including the commissioning event for more information. dwDebugEventCode different according to the above, it can be the following structure:

dwDebugEventCode u explained
CREATE_PROCESS_DEBUG_EVENT structure called CreateProcessInfo the CREATE_PROCESS_DEBUG_INFO
EX99v_PROCESS_DEBUG_EVENT structure called ExitProcess the EX99v_PROCESS_DEBUG_INFO
CREATE_THREAD_DEBUG_EVENT structure called CreateThread the CREATE_THREAD_DEBUG_INFO
EX99v_THREAD_DEBUG_EVENT structure called ExitThread the EX99v_THREAD_DEBUG_EVENT
LOAD_DLL_DEBUG_EVENT structure called LoadDll the LOAD_DLL_DEBUG_INFO
UNLOAD_DLL_DEBUG_EVENT structure called UnloadDll the UNLOAD_DLL_DEBUG_INFO
EXCEPTION_DEBUG_EVENT structure called the Exception of EXCEPTION_DEBUG_INFO
OUTPUT_DEBUG_STRING_EVENT structure called DebugString the OUTPUT_DEBUG_STRING_INFO
RIP_EVENT structure called RipInfo of RIP_INFO

In this tutorial I will not say all of these structures in detail, here only to talk about CREATE_PROCESS_DEBUG_INFO structure in detail.
Suppose our program calls the WaitForDebugEvent function and returns, the first thing we need to do is to check the value in terms debuggee dwDebugEventCode process occurred in the type of debug event. For example, if dwDebugEventCode value CREATE_PROCESS_DEBUG_EVENT, on u can be considered a member of the CreateProcessInfo with u.CreateProcessInfo to visit.

In our program, do the debugging event response. When WaitForDebugEvent return, which means that the process took place in the debuggee debug event or timeout occurred. So our procedure to check dwDebugEventCode to make an appropriate response. Here are some like handling Windows messages: the user to select and ignore messages.
Continue to run debuggee. When the debug event occurs, Windows hangs a debuggee, so when we finished with debugging event, but also to debuggee continue. ContinueDebugEvent function call to complete the process.
ContinueDebugEvent proto dwProcessId: DWORD, dwThreadId: DWORD, dwContinueStatus: DWORD

The function recovery as thread debugging events pending.
dwProcessId and dwThreadId is to restore the thread's process ID and thread ID, usually the two values from DEBUG_EVENT structure dwProcessId and dwThreadId members are.
dwContinueStatus report shows how to debug the event thread. There are two possible values: DBG_CONTINUE and DBG_EXCEPTION_NOT_HANDLED. For most debugging events, the two values are the same: to restore the thread. The only exception is EXCEPTION_DEBUG_EVENT, if the thread is reported in an exception debug event, which means that the thread in the debuggee an exception occurs. If you specify DBG_CONTINUE, the thread will ignore its own exception handling section and continue. In this case, our process must be to DBG_CONTINUE restoration of prior thread and handle the exception, or exceptions will be endless if we continue to occur .... DBG_EXCEPTION_NOT_HANDLED specified value, is to tell Windows that our procedure does not handle the exception: Windows will use the default exception handler debuggee to deal with exception.
In short, if our program does not consider the exceptions, and debugging process of the event has a point debuggee exception, it should call the function with DBG_CONTINUE logo ContinueDebugEvent. Otherwise, our program will have to DBG_EXCEPTION_NOT_HANDLED call ContinueDebugEvent. But in following this circumstances must DBG_CONTINUE signs: the first members of the value in ExceptionCode EXCEPTION_BREAKPOINT of EXCEPTION_DEBUG_EVENT event. When debuggee started its first instruction, our function will receive exception debug event. It is in fact a debug interrupt (int 3h). If we are to respond to DBG_EXCEPTION_NOT_HANDLED call ContinueDebugEvent debug events, Windows NT will refuse debuggee (because it is no exception handling). So in this case, the use DBG_CONTINUE flag tells Windows that we want the thread to continue execution.

Continue the above steps until the debuggee process cycle exit. Our program must be a message loop like the infinite loop until the end debuggee. The cycle of roughly as follows:
. While TRUE
invoke WaitForDebugEvent, addr DebugEvent, INFIN99vE
. Break. If DebugEvent.dwDebugEventCode == EX99v_PROCESS_DEBUG_EVENT

invoke ContinueDebugEvent, DebugEvent.dwProcessId, DebugEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED
. Endw


That is, when starting the debugger, we can not debuggee separate program until it ended.

Let us summarize these steps:

Create a process or a bundle of our program to run the processes.
Wait for the debug events
Response debug event.
Continue debuggee.
To continue this endless loop until the end of the process debuggee
Examples:
This example shows debug a win32 program and handle, such as process, process Id, image base address and so on.

.386
. Model flat, stdcall
option casemap: none
include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includecomdlg32.inc
include masm32includeuser32.inc
includelib masm32libkernel32.lib
includelib masm32libcomdlg32.lib
includelib masm32libuser32.lib
. Data
AppName db "Win32 Debug Example no.1", 0
ofn OPENFILENAME <>
FilterString db "Executable Files", 0, "*. exe", 0
db "All Files", 0 ,"*.*", 0,0
ExitProc db "The debuggee exits", 0
NewThread db "A new thread is created", 0
EndThread db "A thread is destroyed", 0
ProcessInfo db "File Handle:% lx", 0dh, 0Ah
db "Process Handle:% lx", 0Dh, 0Ah
db "Thread Handle:% lx", 0Dh, 0Ah
db "Image Base:% lx", 0Dh, 0Ah
db "Start Address:% lx", 0
. Data?
buffer db 512 dup (?)
startinfo STARTUPINFO <>
pi PROCESS_INFORMATION <>
DBEvent DEBUG_EVENT <>
. Code
start:
mov ofn.lStructSize, sizeof ofn
mov ofn.lpstrFilter, offset FilterString
mov ofn.lpstrFile, offset buffer
mov ofn.nMaxFile, 512
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, ADDR ofn
. If eax == TRUE
invoke GetStartupInfo, addr startinfo
invoke CreateProcess, addr buffer, NULL, NULL, NULL, FALSE, DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS, NULL, NULL, addr startinfo, addr pi
. While TRUE
invoke WaitForDebugEvent, addr DBEvent, INFIN99vE
. If DBEvent.dwDebugEventCode == EX99v_PROCESS_DEBUG_EVENT
invoke MessageBox, 0, addr ExitProc, addr AppName, MB_OK + MB_ICONINFORMATION
. Break
. Elseif DBEvent.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT
invoke wsprintf, addr buffer, addr ProcessInfo, DBEvent.u.CreateProcessInfo.hFile, DBEvent.u.CreateProcessInfo.hProcess, DBEvent.u.CreateProcessInfo.hThread, DBEvent.u.CreateProcessInfo.lpBaseOfImage, DBEvent.u.CreateProcessInfo.lpStartAddress
invoke MessageBox, 0, addr buffer, addr AppName, MB_OK + MB_ICONINFORMATION
. Elseif DBEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
. If DBEvent.u.Exception.pExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT
invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE
. Continue
. Endif
. Elseif DBEvent.dwDebugEventCode == CREATE_THREAD_DEBUG_EVENT
invoke MessageBox, 0, addr NewThread, addr AppName, MB_OK + MB_ICONINFORMATION
. Elseif DBEvent.dwDebugEventCode == EX99v_THREAD_DEBUG_EVENT
invoke MessageBox, 0, addr EndThread, addr AppName, MB_OK + MB_ICONINFORMATION
. Endif
invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED
. Endw
invoke CloseHandle, pi.hProcess
invoke CloseHandle, pi.hThread
. Endif
invoke ExitProcess, 0
end start

Analysis:
Program first fill OPENFILENAME structure, called GetOpenFileName allows users to choose to debug procedures.

invoke GetStartupInfo, addr startinfo
invoke CreateProcess, addr buffer, NULL, NULL, NULL, FALSE, DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS, NULL, NULL, addr startinfo, addr pi

When receiving the user selection, call the CreateProcess loader. And call the default value of fill GetStartupInfo STARTUPINFO structure. NOTE We will DEBUG_PROCESS mark and logo combination DEBUG_ONLY_THIS_PROCESS only debug the program, not including the child process.

. While TRUE
invoke WaitForDebugEvent, addr DBEvent, INFIN99vE


Is loaded in the debuggee, we call WaitForDebugEvent into endless loop debugging, WaitForDebugEvent debug event occurs in the debuggee returns, because we specified INFIN99vE as the second argument. When debug event occurs, WaitForDebugEvent back and fill DBEvent structure.

. If DBEvent.dwDebugEventCode == EX99v_PROCESS_DEBUG_EVENT
invoke MessageBox, 0, addr ExitProc, addr AppName, MB_OK + MB_ICONINFORMATION
. Break

We first check dwDebugEventCode of value if it is EX99v_PROCESS_DEBUG_EVENT, with a message box displays "The debuggee exits" and exit the debugging cycle.

. Elseif DBEvent.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT
invoke wsprintf, addr buffer, addr ProcessInfo, DBEvent.u.CreateProcessInfo.hFile, DBEvent.u.CreateProcessInfo.hProcess, DBEvent.u.CreateProcessInfo.hThread, DBEvent.u.CreateProcessInfo.lpBaseOfImage, DBEvent.u.CreateProcessInfo.lpStartAddress
invoke MessageBox, 0, addr buffer, addr AppName, MB_OK + MB_ICONINFORMATION

If dwDebugEventCode value CREATE_PROCESS_DEBUG_EVENT, we show some interest in the message box the bottom of the information. The information obtained from the u.CreateProcessInfo. CreateProcessInfo a CREATE_PROCESS_DEBUG_INFO type of structure. You can access Win32 API access to it for more information e .

. Elseif DBEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT
. If DBEvent.u.Exception.pExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT
invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE
. Continue
. Endif

If dwDebugEventCode value EXCEPTION_DEBUG_EVENT, we will further check the exception type. It is a lot of nested structure, but we can get from the exception type ExceptionCode members. If ExceptionCode value EXCEPTION_BREAKPOINT and was the first place (or we No known deuggee int 3h instructions), we can safely assume that the first instruction to be executed in debuggee this exception occurs when. in our completion of these processing, you can call ContinueDebugEvent with DBG_CONTINUE to continue debuggee. Then we continue to wait next debug events.

. Elseif DBEvent.dwDebugEventCode == CREATE_THREAD_DEBUG_EVENT
invoke MessageBox, 0, addr NewThread, addr AppName, MB_OK + MB_ICONINFORMATION
. Elseif DBEvent.dwDebugEventCode == EX99v_THREAD_DEBUG_EVENT
invoke MessageBox, 0, addr EndThread, addr AppName, MB_OK + MB_ICONINFORMATION
. Endif

If dwDebugEventCode value CREATE_THREAD_DEBUG_EVENT or EX99v_THREAD_DEBUG_EVENT, our program displays a message box.

invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED
. Endw

In addition to the above discussed EXCEPTION_DEBUG_EVENT, with signs calling ContinueDebugEvent function DBG_EXCEPTION_NOT_HANDLED resume debuggee implementation.

invoke CloseHandle, pi.hProcess
invoke CloseHandle, pi.hThread

When debuggee the end, we jumped out of the debugging cycle, this time to close the thread and process handles debuggee. To close the handle does not mean to shut down these processes and threads. Just not use these handles Bale.







Recommended links:



convert m2ts TO mov



3gpp2 converter



Ps3 Rmvb



Ps3 mov