#include <iostream>
#include <memory>
#include <windows.h>
template <typename T, typename Del = std::default_delete<T>>
inline auto scoped(T *t, Del&& del = std::default_delete<T>)
{
return std::unique_ptr<T, Del>{t, del};
}
HANDLE openfile(char* filename)
{
HANDLE hFile = CreateFileA(filename,
GENERIC_READ,
FILE_SHARE_READ,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
nullptr);
return hFile;
}
struct closefile
{
void operator()(HANDLE h) { CloseHandle(h); }
};
void* load_from_disk(char* filename)
{
auto file = scoped(openfile(filename), closefile());
auto size = GetFileSize(file.get(), nullptr);
auto buff = scoped(new char[size], std::default_delete<char[]>());
return nullptr;
}
int main()
{
load_from_disk("main.exe");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKI2luY2x1ZGUgPHdpbmRvd3MuaD4KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBEZWwgPSBzdGQ6OmRlZmF1bHRfZGVsZXRlPFQ+PgppbmxpbmUgYXV0byBzY29wZWQoVCAqdCwgRGVsJiYgZGVsID0gc3RkOjpkZWZhdWx0X2RlbGV0ZTxUPikKewoJcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxULCBEZWw+e3QsIGRlbH07Cn0KCkhBTkRMRSBvcGVuZmlsZShjaGFyKiBmaWxlbmFtZSkKewoJSEFORExFIGhGaWxlID0gQ3JlYXRlRmlsZUEoZmlsZW5hbWUsCgkJR0VORVJJQ19SRUFELAoJCUZJTEVfU0hBUkVfUkVBRCwKCQludWxscHRyLAoJCU9QRU5fRVhJU1RJTkcsCgkJRklMRV9BVFRSSUJVVEVfTk9STUFMLAoJCW51bGxwdHIpOwoJcmV0dXJuIGhGaWxlOwp9CgpzdHJ1Y3QgY2xvc2VmaWxlCnsKCXZvaWQgb3BlcmF0b3IoKShIQU5ETEUgaCkgeyBDbG9zZUhhbmRsZShoKTsgfQp9OwoKdm9pZCogbG9hZF9mcm9tX2Rpc2soY2hhciogZmlsZW5hbWUpCnsKCWF1dG8gZmlsZSA9IHNjb3BlZChvcGVuZmlsZShmaWxlbmFtZSksIGNsb3NlZmlsZSgpKTsKCWF1dG8gc2l6ZSA9IEdldEZpbGVTaXplKGZpbGUuZ2V0KCksIG51bGxwdHIpOwoJYXV0byBidWZmID0gc2NvcGVkKG5ldyBjaGFyW3NpemVdLCBzdGQ6OmRlZmF1bHRfZGVsZXRlPGNoYXJbXT4oKSk7CgoJcmV0dXJuIG51bGxwdHI7Cn0KCmludCBtYWluKCkKewoJbG9hZF9mcm9tX2Rpc2soIm1haW4uZXhlIik7Cn0=