From 3145ba145b2c50f211ce3762b46ec6ba2cf94238 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:37:54 +0000 Subject: [PATCH 1/4] Initial plan From 328233a75994c68cc67a03cadbcdd86bd241251b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:50:00 +0000 Subject: [PATCH 2/4] Normalize all Portuguese content to English across codebase Co-authored-by: Guila767 <31376051+Guila767@users.noreply.github.com> --- CMakeLists.txt | 4 ++-- include/plib/pe/export_utils.hpp | 10 ++++---- include/plib/rl/rl_loader.h | 12 +++++----- include/plib/rl/rl_tls.h | 8 +++---- lib/src/rl/rl_loader.cpp | 10 ++++---- lib/src/rl/rl_tls.cpp | 28 +++++++++++----------- tools/__pycache__/gen_def.cpython-312.pyc | Bin 0 -> 20225 bytes tools/gen_def.py | 26 ++++++++++---------- 8 files changed, 49 insertions(+), 49 deletions(-) create mode 100644 tools/__pycache__/gen_def.cpython-312.pyc diff --git a/CMakeLists.txt b/CMakeLists.txt index ff7c5c8..a6e3f22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT REFLECT_SIZE_HEX) - message(FATAL_ERROR "Falhou calcular REFLECT_SIZE para ${PROXY_SOURCE_DLL}") + message(FATAL_ERROR "Failed to calculate REFLECT_SIZE for ${PROXY_SOURCE_DLL}") endif() message(STATUS "REFLECT_SIZE=${REFLECT_SIZE_HEX}") @@ -156,7 +156,7 @@ target_link_options(proxy_library PRIVATE $<$,$>:/LTCG /DEBUG:FULL> $<$,$>:/DEBUG:FULL> - # GNU-like (símbolos de depuração) + # GNU-like (debug symbols) $<$>,$>:-g> $<$>,$>:-g> ) diff --git a/include/plib/pe/export_utils.hpp b/include/plib/pe/export_utils.hpp index cee6c5b..62bbb66 100644 --- a/include/plib/pe/export_utils.hpp +++ b/include/plib/pe/export_utils.hpp @@ -15,7 +15,7 @@ static inline const void *to_address(T p) } else { - static_assert(std::is_integral_v, "Use ponteiro de funcao ou inteiro pointer-sized."); + static_assert(std::is_integral_v, "Use function pointer or pointer-sized integer."); return reinterpret_cast(static_cast(p)); } } @@ -59,11 +59,11 @@ namespace plib::pe::export_utils auto va = reinterpret_cast(addr); std::uintptr_t rva = va - base; - // Sanidade: confirme que o RVA cai dentro do image + // Sanity check: confirm that the RVA falls within the image const std::uintptr_t sizeOfImage = nt->OptionalHeader.SizeOfImage; if (rva >= sizeOfImage) { - // Pode ser um trampolim fora das seções do image (ex.: hook/jit). + // May be a trampoline outside the image sections (e.g.: hook/jit). return std::nullopt; } @@ -90,11 +90,11 @@ namespace plib::pe::export_utils auto va = reinterpret_cast(addr); std::uintptr_t rva = va - base; - // Sanidade: confirme que o RVA cai dentro do image + // Sanity check: confirm that the RVA falls within the image const std::uintptr_t sizeOfImage = nt->OptionalHeader.SizeOfImage; if (rva >= sizeOfImage) { - // Pode ser um trampolim fora das seções do image (ex.: hook/jit). + // May be a trampoline outside the image sections (e.g.: hook/jit). return std::nullopt; } diff --git a/include/plib/rl/rl_loader.h b/include/plib/rl/rl_loader.h index 134695a..ead49a3 100644 --- a/include/plib/rl/rl_loader.h +++ b/include/plib/rl/rl_loader.h @@ -13,15 +13,15 @@ extern "C" { #endif typedef struct RL_TLS_STATE { - BOOL has_tls; // existe diretório TLS? - DWORD tls_index; // índice alocado via TlsAlloc (process-scope) + BOOL has_tls; // does TLS directory exist? + DWORD tls_index; // index allocated via TlsAlloc (process-scope) SIZE_T template_size; // (End - Start) + SizeOfZeroFill - SIZE_T align; // alinhamento desejado (opcional: >= 8/16) - PVOID raw_start_va; // VA (relocado) StartAddressOfRawData + SIZE_T align; // desired alignment (optional: >= 8/16) + PVOID raw_start_va; // VA (relocated) StartAddressOfRawData PVOID raw_end_va; // VA EndAddressOfRawData SIZE_T zero_fill; // SizeOfZeroFill - PVOID* p_index_va; // VA onde escrever o índice (AddressOfIndex) - PVOID* callbacks_va; // VA do array NULL-terminated de callbacks + PVOID* p_index_va; // VA where to write the index (AddressOfIndex) + PVOID* callbacks_va; // VA of NULL-terminated array of callbacks } RL_TLS_STATE; typedef struct RL_IMG_INFO { diff --git a/include/plib/rl/rl_tls.h b/include/plib/rl/rl_tls.h index 54201fe..7337853 100644 --- a/include/plib/rl/rl_tls.h +++ b/include/plib/rl/rl_tls.h @@ -8,17 +8,17 @@ extern "C" { #endif -// 0) Descoberta: parse do TLS directory e preenchimento do RL_TLS_STATE +// 0) Discovery: parse TLS directory and fill RL_TLS_STATE NTSTATUS RlTlsDiscover(RL_IMAGE* img); -// 1) Processo: ligar o módulo ao TLS global do Windows +// 1) Process: link module to Windows global TLS NTSTATUS RlTlsProcessAttach(RL_IMAGE* img); -// 2) Thread: preparar/desmontar bloco TLS deste módulo para threads que usarão a DLL +// 2) Thread: prepare/dismantle TLS block of this module for threads that will use the DLL NTSTATUS RlTlsThreadAttach(RL_IMAGE* img); NTSTATUS RlTlsThreadDetach(RL_IMAGE* img); -// 3) Processo: detach final (callbacks + liberar índice) +// 3) Process: final detach (callbacks + free index) NTSTATUS RlTlsProcessDetach(RL_IMAGE* img); NTSTATUS RlTlsInvokeCallbacks(const RL_IMAGE* img, diff --git a/lib/src/rl/rl_loader.cpp b/lib/src/rl/rl_loader.cpp index bd03c88..e169bb4 100644 --- a/lib/src/rl/rl_loader.cpp +++ b/lib/src/rl/rl_loader.cpp @@ -155,7 +155,7 @@ NTSTATUS RlInitImageFromKnownDll(LPCSTR dllName, RL_IMAGE* img_out) { auto& src_image = img_out->src_image; - src_image.base.image = mod; // será liberado por FreeLibrary + src_image.base.image = mod; // will be freed by FreeLibrary src_image.is_image = true; src_image.info.size = nt->OptionalHeader.SizeOfImage; src_image.info.reserved_size = nt->OptionalHeader.SizeOfImage; @@ -168,7 +168,7 @@ NTSTATUS RlInitImageFromKnownDll(LPCSTR dllName, RL_IMAGE* img_out) { NTSTATUS RlMapImageAt(RL_IMAGE* img, void* target_base, size_t target_size) { RL_RETURN_IF_NOT(img && img->src_image.nt && target_base, STATUS_INVALID_PARAMETER); - // Base da origem (única) + // Source base (unique) const BYTE* const src_bytes = img->src_image.base.raw; if (!src_bytes) return STATUS_INVALID_PARAMETER; @@ -192,7 +192,7 @@ NTSTATUS RlMapImageAt(RL_IMAGE* img, void* target_base, size_t target_size) { const DWORD raw = sec->SizeOfRawData; const DWORD virt = sec->Misc.VirtualSize ? sec->Misc.VirtualSize : raw; - // bound por imagem (não por blob; o blob já foi validado) + // bound by image (not by blob; the blob was already validated) RL_ASSERT((SIZE_T)va + (SIZE_T)virt <= size_image); BYTE* dst = dst_base + va; @@ -201,14 +201,14 @@ NTSTATUS RlMapImageAt(RL_IMAGE* img, void* target_base, size_t target_size) { if (src_img.is_image) { - // origem em layout de imagem (VA) + // source in image layout (VA) src = src_bytes + va; // <<< usa a base correta SIZE_T raw_aligned = AlignUp((SIZE_T)raw, (SIZE_T)file_align); ncopy_bytes = raw ? std::min(virt, raw_aligned) : 0; } else { - // origem em layout de arquivo (RAW) + // source in file layout (RAW) src = (raw && sec->PointerToRawData) ? (src_bytes + sec->PointerToRawData) : nullptr; diff --git a/lib/src/rl/rl_tls.cpp b/lib/src/rl/rl_tls.cpp index c358789..2e5c377 100644 --- a/lib/src/rl/rl_tls.cpp +++ b/lib/src/rl/rl_tls.cpp @@ -10,16 +10,16 @@ NTSTATUS RlTlsDiscover(RL_IMAGE *img) RL_TLS_STATE* const out = &img->tls; - // 1) Localizar diretório TLS + // 1) Locate TLS directory auto &dd = img->nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS]; if (!dd.VirtualAddress || !dd.Size) { out->has_tls = FALSE; - return STATUS_SUCCESS; // nada a fazer + return STATUS_SUCCESS; // nothing to do } out->has_tls = TRUE; - // 2) Ler IMAGE_TLS_DIRECTORY (endereços já estão relocados, pois você já aplicou relocs) + // 2) Read IMAGE_TLS_DIRECTORY (addresses are already relocated, since you already applied relocs) #ifdef _WIN64 auto tls = reinterpret_cast(img->base + dd.VirtualAddress); #else @@ -32,14 +32,14 @@ NTSTATUS RlTlsDiscover(RL_IMAGE *img) out->p_index_va = reinterpret_cast(tls->AddressOfIndex); out->callbacks_va = reinterpret_cast(tls->AddressOfCallBacks); - // 3) Tamanho do template (+ zero fill) e alinhamento (use algo seguro, p.ex. 16 em x64)s + // 3) Template size (+ zero fill) and alignment (use something safe, e.g. 16 on x64)s SIZE_T tpl = 0; if (out->raw_end_va >= out->raw_start_va) { tpl = (SIZE_T)((BYTE *)out->raw_end_va - (BYTE *)out->raw_start_va); } out->template_size = tpl + out->zero_fill; - out->align = sizeof(void *) >= 8 ? 16 : 8; // ajuste se quiser ler de Characteristics/section + out->align = sizeof(void *) >= 8 ? 16 : 8; // adjust if you want to read from Characteristics/section return STATUS_SUCCESS; } @@ -52,13 +52,13 @@ NTSTATUS RlTlsProcessAttach(RL_IMAGE *img) RL_TLS_STATE* const st = &img->tls; - // 1) Alocar índice TLS do Windows + // 1) Allocate Windows TLS index DWORD idx = TlsAlloc(); if (idx == TLS_OUT_OF_INDEXES) return STATUS_INSUFFICIENT_RESOURCES; st->tls_index = idx; - // 2) Escrever índice em AddressOfIndex (é um DWORD mesmo em x64) + // 2) Write index to AddressOfIndex (it's a DWORD even on x64) DWORD oldProt = 0; if (st->p_index_va) { @@ -67,11 +67,11 @@ NTSTATUS RlTlsProcessAttach(RL_IMAGE *img) VirtualProtect(st->p_index_va, sizeof(DWORD), oldProt, &oldProt); } - // 3) Criar bloco TLS para o THREAD ATUAL e setar no slot + // 3) Create TLS block for CURRENT THREAD and set in slot if (st->template_size) { SIZE_T size = st->template_size; - // Alocar com alinhamento desejado (pode ser HeapAlloc simples; alinhe manualmente se precisar) + // Allocate with desired alignment (can be simple HeapAlloc; align manually if needed) BYTE *block = (BYTE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size + st->align); if (!block) return STATUS_INSUFFICIENT_RESOURCES; @@ -81,7 +81,7 @@ NTSTATUS RlTlsProcessAttach(RL_IMAGE *img) if (tpl && st->raw_start_va) { memcpy(block, st->raw_start_va, tpl); - // resto já está zerado pelo HEAP_ZERO_MEMORY + // rest is already zeroed by HEAP_ZERO_MEMORY } if (!TlsSetValue(idx, block)) { @@ -110,7 +110,7 @@ NTSTATUS RlTlsThreadAttach(RL_IMAGE* img) const RL_TLS_STATE* const st = &img->tls; - // 1) Alocar + copiar template para ESTE thread + // 1) Allocate + copy template for THIS thread BYTE *block = nullptr; if (st->template_size) { @@ -158,7 +158,7 @@ NTSTATUS RlTlsThreadDetach(RL_IMAGE *img) } // 2) Liberar bloco TLS do thread (se houver) e limpar o slot - void *block = TlsGetValue(st->tls_index); // ok mesmo se falhar; ERROR_INVALID_INDEX não se aplica + void *block = TlsGetValue(st->tls_index); // ok even if it fails; ERROR_INVALID_INDEX doesn't apply if (block) HeapFree(GetProcessHeap(), 0, block); TlsSetValue(st->tls_index, nullptr); @@ -182,10 +182,10 @@ NTSTATUS RlTlsProcessDetach(RL_IMAGE *img) } } - // 2) Liberar índice TLS + // 2) Free TLS index if (st->tls_index != TLS_OUT_OF_INDEXES) { - // (Qualquer bloco remanescente por thread deveria ter sido limpo em ThreadDetach) + // (Any remaining block per thread should have been cleaned in ThreadDetach) TlsFree(st->tls_index); st->tls_index = TLS_OUT_OF_INDEXES; } diff --git a/tools/__pycache__/gen_def.cpython-312.pyc b/tools/__pycache__/gen_def.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1ed637bccf359bfdd804b916a65bbaa6bcd1010 GIT binary patch literal 20225 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 To!*qNSKZ^>iv}ijoa_Gra!EYa literal 0 HcmV?d00001 diff --git a/tools/gen_def.py b/tools/gen_def.py index 98fbdab..ce666b8 100644 --- a/tools/gen_def.py +++ b/tools/gen_def.py @@ -100,7 +100,7 @@ def write_line(self, s: str = ""): self._buf.write(s) self._buf.write(self._newline) - # alias com o nome que você pediu + # alias with the name you requested def write_line_ident(self, s: str = ""): return self.write_line_indent(s) @@ -257,15 +257,15 @@ def emit_asm_thunks_x86(path: Path, dialect: AsmDialect, # --------------------------- def main(argv: list[str]) -> int: - ap = argparse.ArgumentParser(description="Gera .def e stubs referenciando um símbolo de blob (sem stage-1).") + ap = argparse.ArgumentParser(description="Generate .def and stubs referencing a blob symbol (without stage-1).") ap.add_argument("--debug", action="store_true", help="Wait for debugger") - ap.add_argument("source_dll", help="DLL de origem (ex: version.dll ou caminho absoluto).") - ap.add_argument("out_def", help="Caminho do .def a ser gerado.") - ap.add_argument("--out-asm", required=True, help="Caminho do .asm (stubs) a ser gerado.") - ap.add_argument("--out-json", default=None, help="(Opcional) Dump JSON do mapa de RVAs.") - ap.add_argument("--libname", default=None, help="Nome de biblioteca no .def (padrão: nome base do source_dll).") - ap.add_argument("--blob-symbol", default="g_reflect_blob", help="Símbolo do blob na DLL proxy (default: g_reflect_blob).") - ap.add_argument("--asm-dialect", default="masm", choices=["masm", "nasm"], help="Dialeto ASM a ser usado (padrão: masm).") + ap.add_argument("source_dll", help="Source DLL (e.g.: version.dll or absolute path).") + ap.add_argument("out_def", help="Path of .def file to be generated.") + ap.add_argument("--out-asm", required=True, help="Path of .asm (stubs) file to be generated.") + ap.add_argument("--out-json", default=None, help="(Optional) JSON dump of RVA mapping.") + ap.add_argument("--libname", default=None, help="Library name in .def (default: base name of source_dll).") + ap.add_argument("--blob-symbol", default="g_reflect_blob", help="Blob symbol in proxy DLL (default: g_reflect_blob).") + ap.add_argument("--asm-dialect", default="masm", choices=["masm", "nasm"], help="ASM dialect to be used (default: masm).") args = ap.parse_args(argv) if args.debug: @@ -287,7 +287,7 @@ def main(argv: list[str]) -> int: if not source_dll.is_absolute() and source_dll.exists() is False: source_dll = get_known_dll(args.source_dll) if not source_dll or not source_dll.exists(): - raise FileNotFoundError(f"Não foi possível encontrar a DLL de origem: {args.source_dll}") + raise FileNotFoundError(f"Could not find the source DLL: {args.source_dll}") src_pe = pefile.PE(source_dll) machine = get_machine(src_pe) exports = read_exports(src_pe) @@ -315,13 +315,13 @@ def main(argv: list[str]) -> int: base = f"thunk_{e.ordinal}" internal_sym_for[key] = sanitize_internal(base) - # Nome da LIB no .def + # LIB name in .def if args.libname: libname = args.libname else: libname = Path(args.source_dll).stem - # Emitir arquivos + # Emit files out_def = Path(args.out_def) out_asm = Path(args.out_asm) @@ -332,7 +332,7 @@ def main(argv: list[str]) -> int: elif machine == "x86": emit_asm_thunks_x86(out_asm, args.asm_dialect, args.blob_symbol, new_rvas, internal_sym_for) else: - raise SystemExit(f"Arquitetura {machine} ainda não suportada.") + raise SystemExit(f"Architecture {machine} not yet supported.") if args.out_json: j = { From 0a7425558b14e45b81b4e7d8a75c83ed5888a3b6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:50:27 +0000 Subject: [PATCH 3/4] Clean up Python cache files and update gitignore Co-authored-by: Guila767 <31376051+Guila767@users.noreply.github.com> --- .gitignore | 2 +- tools/__pycache__/gen_def.cpython-312.pyc | Bin 20225 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 tools/__pycache__/gen_def.cpython-312.pyc diff --git a/.gitignore b/.gitignore index 9059936..dae28e0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,4 @@ CMakeLists.txt.user *.obj *.iobj *.idb -*.aps \ No newline at end of file +*.aps__pycache__/ diff --git a/tools/__pycache__/gen_def.cpython-312.pyc b/tools/__pycache__/gen_def.cpython-312.pyc deleted file mode 100644 index f1ed637bccf359bfdd804b916a65bbaa6bcd1010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20225 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 To!*qNSKZ^>iv}ijoa_Gra!EYa From 2447b2536ff821baa873dd7ff37b7598e36580ee Mon Sep 17 00:00:00 2001 From: Guilherme de Massena Ladario Date: Thu, 4 Sep 2025 14:41:00 -0300 Subject: [PATCH 4/4] apply requested changes --- lib/src/rl/rl_tls.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/rl/rl_tls.cpp b/lib/src/rl/rl_tls.cpp index 2e5c377..185f073 100644 --- a/lib/src/rl/rl_tls.cpp +++ b/lib/src/rl/rl_tls.cpp @@ -157,7 +157,7 @@ NTSTATUS RlTlsThreadDetach(RL_IMAGE *img) } } - // 2) Liberar bloco TLS do thread (se houver) e limpar o slot + // 2) Free TLS block from thread and clean slot void *block = TlsGetValue(st->tls_index); // ok even if it fails; ERROR_INVALID_INDEX doesn't apply if (block) HeapFree(GetProcessHeap(), 0, block);