From 767bc71cb5344b84a814de421dd0badcf8ac614b Mon Sep 17 00:00:00 2001 From: BullyWiiPlaza Date: Sun, 9 Jul 2017 12:04:27 +0200 Subject: [PATCH] Increase code list size limit --- src/code_handler.h | 2 +- src/patcher/function_patcher_gx2.c | 40 +++++++++-- src/patcher/function_patcher_gx2.h | 23 +++++++ src/tcp_gecko.cpp | 103 +++++++++++++++++------------ tcpgecko.elf | Bin 234164 -> 234420 bytes 5 files changed, 121 insertions(+), 47 deletions(-) diff --git a/src/code_handler.h b/src/code_handler.h index e113112..8ac5689 100644 --- a/src/code_handler.h +++ b/src/code_handler.h @@ -103,7 +103,7 @@ static const unsigned char codeHandler[] = { 0x3C, 0xC0, 0x01, 0x13, 0x60, 0xC6, 0x30, 0x00, 0x3C, 0xE0, 0x01, 0x13, - 0x60, 0xE7, 0x43, 0x00, + 0x60, 0xE7, 0xD6, 0x00, 0x7C, 0x06, 0x38, 0x00, 0x40, 0x80, 0x01, 0xEC, 0x80, 0x46, 0x00, 0x00, diff --git a/src/patcher/function_patcher_gx2.c b/src/patcher/function_patcher_gx2.c index 7ab346f..478bc11 100644 --- a/src/patcher/function_patcher_gx2.c +++ b/src/patcher/function_patcher_gx2.c @@ -19,14 +19,48 @@ #include // image library #include "../utils/function_patcher.h" #include "../utils/logger.h" -#include "texture.h" +#include "function_patcher_gx2.h" #include +#include // memcpy() static volatile int executionCounter = 0; -declareFunctionHook(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, s32 scan_target) { +bool shouldTakeScreenShot = false; +unsigned int remainingImageSize = 0; +unsigned int totalImageSize = 0; +int bufferedImageSize = 0; +void *bufferedImageData = NULL; + +declareFunctionHook(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, s32 + scan_target) { if (executionCounter > 120) { GX2Surface surface = colorBuffer->surface; + log_printf("GX2CopyColorBufferToScanBuffer {surface width:%d, height:%d, image size:%d, image data:%x}\n", + surface.width, surface.height, surface.image_size, surface.image_data); + + if (shouldTakeScreenShot) { + void *imageData = surface.image_data; + totalImageSize = surface.image_size; + remainingImageSize = totalImageSize; + int bufferSize = IMAGE_BUFFER_SIZE; + + while (remainingImageSize > 0) { + bufferedImageData = malloc(bufferSize); + u32 imageSizeRead = totalImageSize - remainingImageSize; + memcpy(bufferedImageData, imageData + imageSizeRead, bufferSize); + bufferedImageSize = bufferSize; + + // Wait while the data is not read yet + while (bufferedImageSize > 0) { + usleep(WAITING_TIME_MILLISECONDS); + } + + free(bufferedImageData); + remainingImageSize -= bufferSize; + } + + shouldTakeScreenShot = false; + } /*s32 format = surface.format; gdImagePtr gdImagePtr = 0; @@ -52,8 +86,6 @@ declareFunctionHook(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer * jpeg.img_id = 0; }*/ - log_printf("GX2CopyColorBufferToScanBuffer {surface width:%d, height:%d, image size:%d, image data:%x}\n", surface.width, surface.height, surface.image_size, surface.image_data); - executionCounter = 0; } diff --git a/src/patcher/function_patcher_gx2.h b/src/patcher/function_patcher_gx2.h index b9791a3..dbfe57d 100644 --- a/src/patcher/function_patcher_gx2.h +++ b/src/patcher/function_patcher_gx2.h @@ -23,8 +23,31 @@ extern "C" { #include "../utils/function_patcher.h" +// The dynamically allocated buffer size for the image copy +#define IMAGE_BUFFER_SIZE 100 + +// The time the producer and consumer wait while there is nothing to do +#define WAITING_TIME_MILLISECONDS 1 + +// Flag for telling the hook whether to dump a screen shot +extern bool shouldTakeScreenShot; + +// Indication for the consumer how many bytes are there to read in total +extern unsigned int totalImageSize; + +// Indication for the consumer how many bytes are left to read +extern unsigned int remainingImageSize; + +// Indication for the consumer how many bytes can be read from the buffer at once +extern int bufferedImageSize; + +// The actual image data buffer for the consumer to consume +extern void *bufferedImageData; + extern FunctionHook method_hooks_gx2[]; + extern u32 method_hooks_size_gx2; + extern volatile unsigned int method_calls_gx2[]; #ifdef __cplusplus diff --git a/src/tcp_gecko.cpp b/src/tcp_gecko.cpp index 2c196b6..1a02899 100644 --- a/src/tcp_gecko.cpp +++ b/src/tcp_gecko.cpp @@ -19,6 +19,7 @@ #include "system/stack.h" #include "system/pause.h" #include "utils/sd_ip_reader.hpp" +#include "patcher/function_patcher_gx2.h" void *client; void *commandBlock; @@ -99,16 +100,6 @@ strm, int flush )); -// ########## Being kernel_copy.h ############ - -// ########## End kernel_copy.h ############ - -// ########## Begin pause.h ############ - - - -// ########## End pause.h ############ - // ########## Being socket_functions.h ############ static int recvwait(struct pygecko_bss_t *bss, int sock, unsigned char *buffer, int len) { @@ -251,18 +242,17 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { switch (ret) { case COMMAND_WRITE_8: { - char *destinationAddress; - ret = recvwait(bss, clientfd, buffer, 8); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0); - destinationAddress = ((char **) buffer)[0]; + char *destinationAddress = ((char **) buffer)[0]; *destinationAddress = buffer[7]; DCFlushRange(destinationAddress, 1); break; } case COMMAND_WRITE_16: { short *destinationAddress; - ret = recvwait(bss, clientfd, buffer, 8); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) destinationAddress = ((short **) buffer)[0]; @@ -272,18 +262,18 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { } case COMMAND_WRITE_32: { int destinationAddress, value; - ret = recvwait(bss, clientfd, buffer, 8); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) destinationAddress = ((int *) buffer)[0]; value = ((int *) buffer)[1]; - kernelCopyData((unsigned char *) destinationAddress, (unsigned char *) &value, 4); + kernelCopyData((unsigned char *) destinationAddress, (unsigned char *) &value, sizeof(int)); break; } case COMMAND_READ_MEMORY: { const unsigned char *startingAddress, *endingAddress; - ret = recvwait(bss, clientfd, buffer, 2 * 4); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) startingAddress = ((const unsigned char **) buffer)[0]; endingAddress = ((const unsigned char **) buffer)[1]; @@ -456,7 +446,7 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { break;*/ } case COMMAND_VALIDATE_ADDRESS_RANGE: { - ret = recvwait(bss, clientfd, buffer, 8); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) // Retrieve the data @@ -496,7 +486,7 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { }*/ case COMMAND_MEMORY_DISASSEMBLE: { // Receive the starting address, ending address and disassembler options - ret = recvwait(bss, clientfd, buffer, 4 + 4 + 4); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 3); CHECK_ERROR(ret < 0) int startingAddress = ((int *) buffer)[0]; int endingAddress = ((int *) buffer)[1]; @@ -536,7 +526,7 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { } int bytesToSend = currentIntegerIndex * integerSize; - ret = sendwait(bss, clientfd, (unsigned char *) &bytesToSend, 4); + ret = sendwait(bss, clientfd, (unsigned char *) &bytesToSend, sizeof(int)); ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (Buffer size)") // VALUE(4)|STATUS(4)|LENGTH(4)|DISASSEMBLED(LENGTH) @@ -545,14 +535,14 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { } int bytesToSend = 0; - ret = sendwait(bss, clientfd, (unsigned char *) &bytesToSend, 4); + ret = sendwait(bss, clientfd, (unsigned char *) &bytesToSend, sizeof(int)); ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (No more bytes)") break; } case COMMAND_READ_MEMORY_COMPRESSED: { // Receive the starting address and length - ret = recvwait(bss, clientfd, buffer, 4 + 4); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) int startingAddress = ((int *) buffer)[0]; unsigned int inputLength = ((unsigned int *) buffer)[1]; @@ -625,38 +615,67 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { break;*/ } case COMMAND_KERNEL_WRITE: { - void *ptr, *value; ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) - ptr = ((void **) buffer)[0]; - value = ((void **) buffer)[1]; + void *address = ((void **) buffer)[0]; + void *value = ((void **) buffer)[1]; - writeKernelMemory(ptr, (uint32_t) value); + writeKernelMemory(address, (uint32_t) value); break; } case COMMAND_KERNEL_READ: { - void *ptr, *value; ret = recvwait(bss, clientfd, buffer, sizeof(int)); - CHECK_ERROR(ret < 0); + CHECK_ERROR(ret < 0) - ptr = ((void **) buffer)[0]; - - value = (void *) readKernelMemory(ptr); + void *address = ((void **) buffer)[0]; + void *value = (void *) readKernelMemory(address); *(void **) buffer = value; sendwait(bss, clientfd, buffer, sizeof(int)); break; } case COMMAND_TAKE_SCREEN_SHOT: { - GX2ColorBuffer colorBuffer; + // Tell the hook to dump the screen shot now + shouldTakeScreenShot = true; + + // Tell the client the size of the upcoming image + ret = sendwait(bss, clientfd, (unsigned char *) &totalImageSize, sizeof(int)); + ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (total image size)") + + // Keep sending the image data + while (remainingImageSize > 0) { + int bufferPosition = 0; + + // Fill the buffer till it is full + while (bufferPosition <= DATA_BUFFER_SIZE) { + // Wait for data to be available + while (bufferedImageSize == 0) { + usleep(WAITING_TIME_MILLISECONDS); + } + + memcpy(buffer + bufferPosition, bufferedImageData, bufferedImageSize); + bufferPosition += bufferedImageSize; + bufferedImageSize = 0; + } + + // Send the size of the current chunk + ret = sendwait(bss, clientfd, (unsigned char *) &bufferPosition, sizeof(int)); + ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (image data chunk size)") + + // Send the image data itself + ret = sendwait(bss, clientfd, buffer, bufferPosition); + ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (image data)") + } + + /*GX2ColorBuffer colorBuffer; // TODO Initialize colorBuffer! GX2Surface surface = colorBuffer.surface; void *image_data = surface.image_data; u32 image_size = surface.image_size; // Send the image size so that the client knows how much to read - ret = sendwait(bss, clientfd, (unsigned char *) &image_size, 4); + ret = sendwait(bss, clientfd, (unsigned char *) &image_size, sizeof(int)); ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (image size)") unsigned int imageBytesSent = 0; @@ -674,37 +693,37 @@ static int processCommands(struct pygecko_bss_t *bss, int clientfd) { ASSERT_FUNCTION_SUCCEEDED(ret, "sendwait (image bytes)") imageBytesSent += length; - } + }*/ break; } case COMMAND_UPLOAD_MEMORY: { // Receive the starting and ending addresses - ret = recvwait(bss, clientfd, buffer, 8); + ret = recvwait(bss, clientfd, buffer, sizeof(int) * 2); CHECK_ERROR(ret < 0) - unsigned char *current_address = ((unsigned char **) buffer)[0]; - unsigned char *end_address = ((unsigned char **) buffer)[1]; + unsigned char *currentAddress = ((unsigned char **) buffer)[0]; + unsigned char *endAddress = ((unsigned char **) buffer)[1]; - while (current_address != end_address) { + while (currentAddress != endAddress) { int length; - length = (int) (end_address - current_address); + length = (int) (endAddress - currentAddress); if (length > DATA_BUFFER_SIZE) { length = DATA_BUFFER_SIZE; } ret = recvwait(bss, clientfd, buffer, length); CHECK_ERROR(ret < 0) - kernelCopyData(current_address, buffer, (unsigned int) length); + kernelCopyData(currentAddress, buffer, (unsigned int) length); - current_address += length; + currentAddress += length; } break; } case COMMAND_GET_DATA_BUFFER_SIZE: { ((int *) buffer)[0] = DATA_BUFFER_SIZE; - ret = sendwait(bss, clientfd, buffer, 4); + ret = sendwait(bss, clientfd, buffer, sizeof(int)); CHECK_ERROR(ret < 0) break; diff --git a/tcpgecko.elf b/tcpgecko.elf index 02b68a01d5747795bc281d88642936a721b78c80..81d56f44fd0a29603cea3de81d68ece4ffad674c 100644 GIT binary patch delta 39759 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 delta 39408 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