diff --git a/cpp/examples/cfg_analysis.cpp b/cpp/examples/cfg_analysis.cpp index 0ea1079..cc0f9d8 100644 --- a/cpp/examples/cfg_analysis.cpp +++ b/cpp/examples/cfg_analysis.cpp @@ -47,7 +47,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // Find first function - auto funcs = client->ListFunctions(0, UINT64_MAX, 1, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 1, 0); if (!funcs.ok() || funcs.value->functions.empty()) { std::cerr << "No functions found.\n"; return 1; diff --git a/cpp/examples/comments.cpp b/cpp/examples/comments.cpp index 3af7fe9..cf113d1 100644 --- a/cpp/examples/comments.cpp +++ b/cpp/examples/comments.cpp @@ -57,7 +57,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // Find first function to get a valid address - auto funcs = client->ListFunctions(0, UINT64_MAX, 1, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 1, 0); if (!funcs.ok() || funcs.value->functions.empty()) { std::cerr << "No functions found.\n"; return 1; diff --git a/cpp/examples/decompile_tokens.cpp b/cpp/examples/decompile_tokens.cpp index a2d120b..e67ae32 100644 --- a/cpp/examples/decompile_tokens.cpp +++ b/cpp/examples/decompile_tokens.cpp @@ -72,7 +72,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n"; // Find first non-trivial function - auto funcs = client->ListFunctions(0, UINT64_MAX, 20, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 20, 0); if (!funcs.ok() || funcs.value->functions.empty()) { std::cerr << "No functions found.\n"; return 1; diff --git a/cpp/examples/disassemble.cpp b/cpp/examples/disassemble.cpp index 691b116..10c2b27 100644 --- a/cpp/examples/disassemble.cpp +++ b/cpp/examples/disassemble.cpp @@ -47,7 +47,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // Find the first function - auto funcs = client->ListFunctions(0, UINT64_MAX, 1, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 1, 0); if (!funcs.ok() || funcs.value->functions.empty()) { std::cerr << "No functions found.\n"; return 1; diff --git a/cpp/examples/end_to_end.cpp b/cpp/examples/end_to_end.cpp index 4fa856e..0f7a7ce 100644 --- a/cpp/examples/end_to_end.cpp +++ b/cpp/examples/end_to_end.cpp @@ -28,7 +28,7 @@ // --------------------------------------------------------------------------- static void analyze(ghidra::Client& client) { - auto funcs_resp = client.ListFunctions(0, UINT64_MAX, 0, 0); + auto funcs_resp = client.ListFunctions(0, INT64_MAX, 0, 0); if (!funcs_resp.ok()) { fprintf(stderr, "ListFunctions failed: %s\n", funcs_resp.status.message.c_str()); diff --git a/cpp/examples/function_signatures.cpp b/cpp/examples/function_signatures.cpp index a493039..0e4db76 100644 --- a/cpp/examples/function_signatures.cpp +++ b/cpp/examples/function_signatures.cpp @@ -49,7 +49,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // Find first function - auto funcs = client->ListFunctions(0, UINT64_MAX, 1, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 1, 0); if (!funcs.ok() || funcs.value->functions.empty()) { std::cerr << "No functions found.\n"; return 1; @@ -84,7 +84,7 @@ int main(int argc, char* argv[]) { } // --- List all function signatures --- - auto sigs = client->ListFunctionSignatures(0, UINT64_MAX, 10, 0); + auto sigs = client->ListFunctionSignatures(0, INT64_MAX, 10, 0); if (sigs.ok()) { std::cout << "\nAll signatures (first " << sigs.value->signatures.size() << "):\n"; for (const auto& s : sigs.value->signatures) { diff --git a/cpp/examples/function_tags.cpp b/cpp/examples/function_tags.cpp index fe8d9f6..54370f8 100644 --- a/cpp/examples/function_tags.cpp +++ b/cpp/examples/function_tags.cpp @@ -56,7 +56,7 @@ int main(int argc, char* argv[]) { } // 4. Tag first two functions - auto funcs = client->ListFunctions(0, UINT64_MAX, 2, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 2, 0); if (!funcs.ok() || funcs.value->functions.empty()) { fprintf(stderr, "ListFunctions failed or empty\n"); return 1; diff --git a/cpp/examples/headless_cookbook.cpp b/cpp/examples/headless_cookbook.cpp index d390fad..ca6a43a 100644 --- a/cpp/examples/headless_cookbook.cpp +++ b/cpp/examples/headless_cookbook.cpp @@ -64,7 +64,7 @@ static bool verify_connection(ghidra::Client& c) { static void list_functions(ghidra::Client& c) { print_separator("Functions"); - auto resp = c.ListFunctions(0, UINT64_MAX, 0, 0); + auto resp = c.ListFunctions(0, INT64_MAX, 0, 0); if (!resp.ok()) { fprintf(stderr, "ListFunctions: %s\n", resp.status.message.c_str()); return; @@ -94,7 +94,7 @@ static void list_functions(ghidra::Client& c) { static void decompile_first(ghidra::Client& c) { print_separator("Decompilation (first function)"); - auto resp = c.ListFunctions(0, UINT64_MAX, 1, 0); // page_size=1 + auto resp = c.ListFunctions(0, INT64_MAX, 1, 0); // page_size=1 if (!resp.ok() || resp.value->functions.empty()) { printf(" (no functions to decompile)\n"); return; @@ -125,7 +125,7 @@ static void decompile_first(ghidra::Client& c) { static void rename_demo(ghidra::Client& c) { print_separator("Rename demo"); - auto resp = c.ListFunctions(0, UINT64_MAX, 1, 0); + auto resp = c.ListFunctions(0, INT64_MAX, 1, 0); if (!resp.ok() || resp.value->functions.empty()) { printf(" (no functions to rename)\n"); return; diff --git a/cpp/examples/list_xrefs.cpp b/cpp/examples/list_xrefs.cpp index 78a6529..fe5a62e 100644 --- a/cpp/examples/list_xrefs.cpp +++ b/cpp/examples/list_xrefs.cpp @@ -50,7 +50,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // List all functions first - auto funcs = client->ListFunctions(0, UINT64_MAX, 0, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 0, 0); if (!funcs.ok()) { std::cerr << "ListFunctions failed: " << funcs.status.message << "\n"; return 1; @@ -58,7 +58,7 @@ int main(int argc, char* argv[]) { std::cout << "Found " << funcs.value->functions.size() << " functions\n\n"; // Get xrefs across the entire address space - auto xrefs = client->ListXrefs(0, UINT64_MAX, 0, 0); + auto xrefs = client->ListXrefs(0, INT64_MAX, 0, 0); if (!xrefs.ok()) { std::cerr << "ListXrefs failed: " << xrefs.status.message << "\n"; return 1; diff --git a/cpp/examples/parallel_headless.cpp b/cpp/examples/parallel_headless.cpp index 8c2650a..83eb61e 100644 --- a/cpp/examples/parallel_headless.cpp +++ b/cpp/examples/parallel_headless.cpp @@ -73,7 +73,7 @@ static InstanceResult analyze_instance(const std::string& label, status.value->service_name.c_str(), status.value->service_version.c_str()); - auto funcs = h->ListFunctions(0, UINT64_MAX, 0, 0); + auto funcs = h->ListFunctions(0, INT64_MAX, 0, 0); if (!funcs.ok()) { result.error = "ListFunctions: " + funcs.status.message; h.close(false); diff --git a/cpp/examples/quickstart.cpp b/cpp/examples/quickstart.cpp index eb3c54b..cdc4cad 100644 --- a/cpp/examples/quickstart.cpp +++ b/cpp/examples/quickstart.cpp @@ -54,7 +54,7 @@ int main(int argc, char* argv[]) { } // 3. List the first 10 functions - auto funcs = client->ListFunctions(0, UINT64_MAX, 10, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 10, 0); if (!funcs.ok()) { fprintf(stderr, "ListFunctions failed: %s\n", funcs.status.message.c_str()); diff --git a/cpp/examples/structural_analysis.cpp b/cpp/examples/structural_analysis.cpp index ff4a998..11debe3 100644 --- a/cpp/examples/structural_analysis.cpp +++ b/cpp/examples/structural_analysis.cpp @@ -67,7 +67,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // Find first function - auto funcs = client->ListFunctions(0, UINT64_MAX, 1, 0); + auto funcs = client->ListFunctions(0, INT64_MAX, 1, 0); if (!funcs.ok() || funcs.value->functions.empty()) { std::cerr << "No functions found.\n"; return 1; diff --git a/cpp/examples/symbols.cpp b/cpp/examples/symbols.cpp index ce0b930..3b3127f 100644 --- a/cpp/examples/symbols.cpp +++ b/cpp/examples/symbols.cpp @@ -47,7 +47,7 @@ int main(int argc, char* argv[]) { std::cout << "Loaded: " << open_result.value->program_name << "\n\n"; // --- List symbols --- - auto syms = client->ListSymbols(0, UINT64_MAX, 20, 0); + auto syms = client->ListSymbols(0, INT64_MAX, 20, 0); if (!syms.ok()) { std::cerr << "ListSymbols failed: " << syms.status.message << "\n"; return 1; diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/DecompilerRuntime.java b/ghidra-extension/src/main/java/libghidra/host/runtime/DecompilerRuntime.java index 920b5e1..eb3cdc9 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/DecompilerRuntime.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/DecompilerRuntime.java @@ -60,15 +60,11 @@ public DecompilerContract.ListDecompilationsResponse listDecompilations( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new DecompilerContract.ListDecompilationsResponse(List.of()); } diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/FunctionsRuntime.java b/ghidra-extension/src/main/java/libghidra/host/runtime/FunctionsRuntime.java index 235974e..5061522 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/FunctionsRuntime.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/FunctionsRuntime.java @@ -74,15 +74,11 @@ public FunctionsContract.ListFunctionsResponse listFunctions( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new FunctionsContract.ListFunctionsResponse(List.of()); } @@ -190,15 +186,11 @@ public FunctionsContract.ListBasicBlocksResponse listBasicBlocks( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { - endOff = defaultEnd; - } int offset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; @@ -251,15 +243,11 @@ public FunctionsContract.ListCFGEdgesResponse listCFGEdges( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { - endOff = defaultEnd; - } int offset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; @@ -461,11 +449,9 @@ public FunctionsContract.ListSwitchTablesResponse listSwitchTables( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { endOff = defaultEnd; } int pOffset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; @@ -540,11 +526,9 @@ public FunctionsContract.ListDominatorsResponse listDominators( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { endOff = defaultEnd; } int pOffset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; @@ -587,11 +571,9 @@ public FunctionsContract.ListPostDominatorsResponse listPostDominators( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { endOff = defaultEnd; } int pOffset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; @@ -636,11 +618,9 @@ public FunctionsContract.ListLoopsResponse listLoops( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { endOff = defaultEnd; } int pOffset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/ListingRuntime.java b/ghidra-extension/src/main/java/libghidra/host/runtime/ListingRuntime.java index 9922c65..c6d045d 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/ListingRuntime.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/ListingRuntime.java @@ -69,15 +69,11 @@ public ListingContract.ListInstructionsResponse listInstructions( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new ListingContract.ListInstructionsResponse(List.of()); } @@ -123,15 +119,11 @@ public ListingContract.GetCommentsResponse getComments(ListingContract.GetCommen } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new ListingContract.GetCommentsResponse(List.of()); } @@ -379,15 +371,11 @@ public ListingContract.ListDataItemsResponse listDataItems( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new ListingContract.ListDataItemsResponse(List.of()); } @@ -450,15 +438,11 @@ public ListingContract.ListBookmarksResponse listBookmarks( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new ListingContract.ListBookmarksResponse(List.of()); } @@ -597,15 +581,11 @@ public ListingContract.ListBreakpointsResponse listBreakpoints( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new ListingContract.ListBreakpointsResponse(List.of()); } @@ -849,15 +829,11 @@ public ListingContract.ListDefinedStringsResponse listDefinedStrings( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOff = request != null ? request.rangeStart() : defaultStart; - long endOff = request != null ? request.rangeEnd() : defaultEnd; + long endOff = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOff <= 0) { startOff = defaultStart; } - if (endOff <= 0) { - endOff = defaultEnd; - } int offset = request != null ? Math.max(0, request.offset()) : 0; int limit = request != null && request.limit() > 0 ? request.limit() : 4096; diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/RuntimeSupport.java b/ghidra-extension/src/main/java/libghidra/host/runtime/RuntimeSupport.java index 270817c..ae29c3d 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/RuntimeSupport.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/RuntimeSupport.java @@ -70,6 +70,21 @@ protected static Address toAddress(Program program, long offset) { } } + /** + * Normalize a "list" RPC's range-end offset, treating a non-positive value as unbounded. + * + *

The C++ client encodes an unbounded upper bound as the protobuf {@code uint64} + * {@code UINT64_MAX}, which is decoded here into a signed Java {@code long} as {@code -1}. + * Earlier code fell back to {@code program.getMaxAddress().getOffset()} for any + * non-positive end; for programs whose maximum address lives in a low-offset space (an + * EXTERNAL block, or file-backed "OTHER" sections at offset 0) that collapsed the scan + * window and made range-filtered tables return no rows. Treating it as + * {@link Long#MAX_VALUE} keeps the scan unbounded. See ghidrasql #2/#3/#6. + */ + protected static long resolveRangeEnd(long requestedEnd) { + return requestedEnd <= 0 ? Long.MAX_VALUE : requestedEnd; + } + protected static void writeBytesForceWritable(Program program, Address address, byte[] data) throws MemoryAccessException { Memory memory = program.getMemory(); diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/SymbolsRuntime.java b/ghidra-extension/src/main/java/libghidra/host/runtime/SymbolsRuntime.java index c6d39c4..608f287 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/SymbolsRuntime.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/SymbolsRuntime.java @@ -47,15 +47,11 @@ public SymbolsContract.ListSymbolsResponse listSymbols(SymbolsContract.ListSymbo } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new SymbolsContract.ListSymbolsResponse(List.of()); } diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/TypesRuntime.java b/ghidra-extension/src/main/java/libghidra/host/runtime/TypesRuntime.java index 6af2cc3..09eac38 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/TypesRuntime.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/TypesRuntime.java @@ -349,15 +349,11 @@ public TypesContract.ListFunctionSignaturesResponse listFunctionSignatures( } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new TypesContract.ListFunctionSignaturesResponse(List.of()); } diff --git a/ghidra-extension/src/main/java/libghidra/host/runtime/XrefsRuntime.java b/ghidra-extension/src/main/java/libghidra/host/runtime/XrefsRuntime.java index 2389822..4a29cb3 100644 --- a/ghidra-extension/src/main/java/libghidra/host/runtime/XrefsRuntime.java +++ b/ghidra-extension/src/main/java/libghidra/host/runtime/XrefsRuntime.java @@ -24,15 +24,11 @@ public XrefsContract.ListXrefsResponse listXrefs(XrefsContract.ListXrefsRequest } try { long defaultStart = program.getMinAddress().getOffset(); - long defaultEnd = program.getMaxAddress().getOffset(); long startOffset = request != null ? request.rangeStart() : defaultStart; - long endOffset = request != null ? request.rangeEnd() : defaultEnd; + long endOffset = resolveRangeEnd(request != null ? request.rangeEnd() : 0); if (startOffset <= 0) { startOffset = defaultStart; } - if (endOffset <= 0) { - endOffset = defaultEnd; - } if (endOffset < startOffset) { return new XrefsContract.ListXrefsResponse(List.of()); }