小编J. *_*Doe的帖子

定义char和int时指针有什么区别?

我理解指针如何工作的基础知识,但以下示例让我感到困惑.

int *myNum = 10; // Produces an error

char *myChar = "Something"; // Works fine
Run Code Online (Sandbox Code Playgroud)

为什么分配char工作但整数不工作(可能导致char被视为数组)?

在直接分配指针变量时,是什么让我感到困惑,它会自动获取地址吗?

char *myChar = "Something";
Run Code Online (Sandbox Code Playgroud)

char myChar = "Something";
char *charAddr = &myChar;
Run Code Online (Sandbox Code Playgroud)

这里有什么不同,或等于?

c++ pointers

11
推荐指数
2
解决办法
1827
查看次数

XML Serialization最后生成随机字符串?C#

在分类并保存到文件时,有时会出现序列化输出如下所示的错误:

<?xml version="1.0"?>
<Template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Route>Some Route</Route>
    <TradePack>Something Here</TradePack>
    <Transport />
</Template>te> ------> Notice this extra string?
Run Code Online (Sandbox Code Playgroud)

我正在序列化的类看起来像这样:

[Serializable]
public class Template
{
    public string Route = string.Empty;
    public string TradePack = string.Empty;
    public string Transport = string.Empty;

    public Template()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚为什么会这样.这是我的序列化程序类:

    public static bool Save(object obj, string path)
    {
        try
        {
            XmlSerializer writer = new XmlSerializer(obj.GetType());

            using (var stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                writer.Serialize(stream, obj);
            }

            return true;
        }
        catch { }
        return …
Run Code Online (Sandbox Code Playgroud)

c# xml serialization

6
推荐指数
1
解决办法
138
查看次数

从Protected Virtual Void方法或直接提升事件有什么不同?

我看到了一些教程,我无法理解为什么他们建议从虚拟保护方法中提出事件,而不是直接,有什么区别?

public delegate void SomethingEventHandler(string s);
public event SomethingEventHandler Something;

public void Main() {

  // Raising an event
  OnSomething(); // Via method
  Something("something"); // Directly
}

protected virtual void OnSomething() 
{
  Something("something");
}
Run Code Online (Sandbox Code Playgroud)

c# events

5
推荐指数
2
解决办法
1273
查看次数

参数和带约束的 T 泛型参数有什么区别?C#

我真的不明白两者之间有什么区别:

private void Send<T>(T packet) where T : IPacket
Run Code Online (Sandbox Code Playgroud)

private void Send(IPacket packet)
Run Code Online (Sandbox Code Playgroud)

既然通用有限制,那不是一模一样吗?如果不是,那么这里的区别是什么?使用带有约束的通用方法相对于简单方法有什么优点?

谢谢!

c# generics parameters

5
推荐指数
1
解决办法
174
查看次数

=&gt; 运算符从字段或方法指向是什么意思?C#

我在下面的例子中看到了一个运算符 =>:

public int Calculate(int x) => DoSomething(x);
Run Code Online (Sandbox Code Playgroud)

或者

public void DoSoething() => SomeOtherMethod();
Run Code Online (Sandbox Code Playgroud)

除了在 Lamba 表达式中,我以前从未见过像这样使用这个运算符。

以下有什么作用?应该在哪里、什么时候使用?

c# lambda function

5
推荐指数
2
解决办法
7277
查看次数

LPVOID上的DWORD类型转换返回什么?

在C++中使用类型转换时,我有时会感到困惑,这些回归到底是什么?

LPVOID lpFunction;
DWORD dw = (DWORD)lpFunction; // What does it take from LPVOID?
Run Code Online (Sandbox Code Playgroud)

将会有更多的一般性解释.谢谢

c++ pointers casting

2
推荐指数
1
解决办法
2617
查看次数

函数挂钩实际上是如何工作的?WinAPI,C++

我将我的 DLL 注入到一个进程中,然后挂钩这样的函数:(recv)

BOOL HookFunction(LPCWSTR moduleName, LPCSTR funcName, LPVOID funcProxy, 
unsigned char* lpBackup)
{
     BYTE jmp[6] = { 0xe9,0x00,0x00,0x00,0x00,0xc3 };
     DWORD funcAddr = (DWORD)GetProcAddress(GetModuleHandle(moduleName), funcName);

     DWORD prev;
     VirtualProtect((LPVOID)funcAddr, 6, PAGE_EXECUTE_READWRITE, &prev);

     ReadProcessMemory(GetCurrentProcess(), (LPVOID)funcAddr, lpBackup, 6, NULL);

     DWORD proxy = ((DWORD)funcProxy - funcAddr) - 5;
     memcpy(&jmp[1], &proxy, 4);
     memcpy((LPVOID)funcAddr, jmp, 6);

     VirtualProtect((LPVOID)funcAddr, 6, prev, &prev);
     FlushInstructionCache(GetCurrentProcess(), NULL, NULL);

     return funcAddr;
}

// Hook
HookFunction(L"ws2_32.dll", "recv", (LPVOID*)nRecv, hookR);
Run Code Online (Sandbox Code Playgroud)

然后我附加了一个调试器,结果如下:

挂机前: 在此处输入图片说明

上钩后: 在此处输入图片说明

不过,有几件事我不明白,因为我仍在尝试理解和想象堆栈、堆等如何在调试器中协同工作。

BYTE jmp[6] = { 0xe9,0x00,0x00,0x00,0x00,0xc3 };
Run Code Online (Sandbox Code Playgroud)

我是否在这里替换指令,例如,用 0xe9 替换原始函数的“move, edi, …

windows debugging hook code-injection

2
推荐指数
1
解决办法
3502
查看次数

为什么在C#中将ushort端口号从htons转换为ntohs给出不同的结果?

我在使用htons将其转换为网络字节之前,通过套接字(c ++客户端)发送端口号(ushort,2个字节).

当使用C#服务器接收时,我正在使用它进行转换,IPAddress.NetworkToHostOrder数字完全不同.

htons(8085) -> 38175 ??
IPAddress.NetworkToHostOrder(38175) -> ??
Run Code Online (Sandbox Code Playgroud)

这是什么原因?

c++ networking winapi

1
推荐指数
1
解决办法
339
查看次数

CONTEXT结构不包含Eip?C++

我正在尝试修改线程,而CONTEXT结构不包含Eip.

HANDLE hThread;
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_ALL;

DWORD processId = GetCurrentProcessId();
DWORD mainThreadId = GetMainThreadId(processId);

hThread = OpenThread((THREAD_GET_CONTEXT | THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME), FALSE, mainThreadId);
if (hThread)
{
    if (GetThreadContext(hThread, &ctx))
    {
        ???ctx.Eip??
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么,尽管它应该.谢谢!

c++ winapi struct

-2
推荐指数
1
解决办法
984
查看次数