我想做一个明确的,但只是我执行的最后一个命令。这是一个示例,以便您可以更好地理解它:
root@debian:~# id
uid=0(root) gid=0(root) groups=0(root)
root@debian:~# uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux
root@debian:~#
Run Code Online (Sandbox Code Playgroud)
如果这是 shell 的当前状态,我想执行一个命令(例如echo a > /tmp/foo)并保留控制台:
root@debian:~# id
uid=0(root) gid=0(root) groups=0(root)
root@debian:~# uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux
root@debian:~#
Run Code Online (Sandbox Code Playgroud)
所以它应该是这样的echo a > /tmp/foo && clear -n 1(我知道 clear 没有 -n 1 功能,这只是一个例子)。
谢谢
我有一个充当调试器的程序.我为线程设置dr0设置了一个hw bp到我想要bp的地址,dr7设置为1,因为我希望每次执行该地址时bp都会生成一个事件.
它的工作原理但现在的问题是我不会一直停止接收EXCEPTION_SINGLE_STEP.我像往常一样用WaitForDebugEvent创建了一个循环:
DebugActiveProcess(pid);
while (flag == 0)
{
WaitForDebugEvent(&DBEvent, INFINITE);
if (first_time){
setHWBPInCurrentThreads(pid, breakpoint_address);
first_time = 0;
}
switch (DBEvent.dwDebugEventCode)
{
// Here we check if a new thread is created and we set a BP for all of them
case CREATE_THREAD_DEBUG_EVENT:
{
HANDLE thread_handle = DBEvent.u.CreateProcessInfo.hProcess;
HANDLE hX3 = SetHardwareBreakpoint(thread_handle, HWBRK_TYPE_CODE, HWBRK_SIZE_1, breakpoint_address);
}break;
case EXCEPTION_DEBUG_EVENT:
{
switch (DBEvent.u.Exception.ExceptionRecord.ExceptionCode)
{
case EXCEPTION_SINGLE_STEP:
{
printf("%d\n", DBEvent.dwThreadId);
///MessageBoxA(0, "yesssssssss", "", 0);
}break;
case EXCEPTION_BREAKPOINT:
{
//MessageBoxA(0, "Found break point", "", …Run Code Online (Sandbox Code Playgroud)