Restructured payloads into folders
This commit is contained in:
@@ -1,18 +1,23 @@
|
||||
set(PL_NAMES
|
||||
aes_busy
|
||||
aes_sw_bern
|
||||
aes_sw_corr
|
||||
cachelib
|
||||
exit_usb_task
|
||||
floppysleep
|
||||
sync
|
||||
crypto:aes_busy
|
||||
crypto:aes_sw_bern
|
||||
crypto:aes_sw_corr
|
||||
|
||||
system:cachelib
|
||||
system:exit_usb_task
|
||||
system:init_sys
|
||||
system:sync
|
||||
|
||||
power:floppysleep
|
||||
)
|
||||
|
||||
foreach(NAME ${PL_NAMES})
|
||||
list(APPEND PL_TARGETS "payload_${NAME}")
|
||||
list(APPEND PL_SRC_BIN "${CMAKE_CURRENT_LIST_DIR}/payload/src/${NAME}.c")
|
||||
string(REGEX REPLACE "^[^:]*\\:(.*)$" "\\1" NAME_ONLY ${NAME})
|
||||
list(APPEND PL_TARGETS "payload_${NAME_ONLY}")
|
||||
endforeach(NAME)
|
||||
|
||||
message("${PL_TARGETS}")
|
||||
|
||||
foreach(TARGET ${PL_TARGETS})
|
||||
list(APPEND PL_SRC_LIB "${CMAKE_CURRENT_BINARY_DIR}/lib_cfiles/${TARGET}.c")
|
||||
list(APPEND PL_BIN "${CMAKE_CURRENT_BINARY_DIR}/payload/bin/${TARGET}.bin")
|
||||
@@ -39,7 +44,7 @@ add_custom_command(TARGET payload POST_BUILD
|
||||
${CMAKE_CURRENT_BINARY_DIR}/lib_cfiles
|
||||
${CMAKE_SOURCE_DIR}/c8_remote/include/tool)
|
||||
|
||||
add_library(experiments experiments/aes_sw.c
|
||||
add_library(experiments experiments/crypto.c
|
||||
experiments/system.c
|
||||
experiments/power.c)
|
||||
add_library(host_crypto crypto/aes_sw_impl.c crypto/aes_sw_host.c)
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include "tool/command.h"
|
||||
#include "dev/addr.h"
|
||||
|
||||
void usb_task_exit(struct pwned_device *dev)
|
||||
{
|
||||
@@ -38,8 +39,7 @@ void usb_task_exit(struct pwned_device *dev)
|
||||
return;
|
||||
}
|
||||
|
||||
resp = execute_payload(dev, PAYLOAD_EXIT_USB_TASK, 0,
|
||||
1, get_payload_address(dev, PAYLOAD_EXIT_USB_TASK));
|
||||
resp = execute_payload(dev, PAYLOAD_EXIT_USB_TASK, 0, 0);
|
||||
if(IS_CHECKM8_FAIL(resp->ret))
|
||||
{
|
||||
printf("failed to exit usb task\n");
|
||||
|
||||
@@ -19,23 +19,24 @@ set(CMAKE_C_FLAGS "-nostdlib -O")
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
|
||||
|
||||
foreach(NAME ${PL_NAMES})
|
||||
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S)
|
||||
add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/payload_entry.S
|
||||
${CMAKE_CURRENT_LIST_DIR}/payload_entry.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S)
|
||||
else()
|
||||
add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/payload_entry.S
|
||||
${CMAKE_CURRENT_LIST_DIR}/payload_entry.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c)
|
||||
string(REPLACE ":" "/" SRC_PATH ${NAME})
|
||||
string(REGEX REPLACE "^[^:]*\\:(.*)$" "\\1" NAME_ONLY ${NAME})
|
||||
|
||||
set(SRC_NAME ${NAME}_SRCS)
|
||||
set(${SRC_NAME} src/payload_entry.S src/payload_entry.c src/${SRC_PATH}.c)
|
||||
|
||||
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${SRC_PATH}.S)
|
||||
list(APPEND ${SRC_NAME} src/${SRC_PATH}.S)
|
||||
endif()
|
||||
|
||||
add_custom_command(TARGET payload_${NAME} POST_BUILD
|
||||
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin
|
||||
add_executable(payload_${NAME_ONLY} ${${SRC_NAME}})
|
||||
message(adding payload_${NAME_ONLY})
|
||||
add_custom_command(TARGET payload_${NAME_ONLY} POST_BUILD
|
||||
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME_ONLY}.bin
|
||||
COMMAND ${CMAKE_OBJCOPY}
|
||||
ARGS -O binary -j .text -j .payload_text
|
||||
${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin)
|
||||
ARGS -O binary -j .text -j .payload_text -j .payload_data
|
||||
${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME_ONLY}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME_ONLY}.bin)
|
||||
endforeach(NAME)
|
||||
|
||||
add_library(dev_crypto ../crypto/aes_sw_impl.c)
|
||||
|
||||
@@ -17,6 +17,6 @@ typedef unsigned int uint32_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
|
||||
#define PAYLOAD_SECTION __attribute__ ((section (".payload_text")))
|
||||
#define TEXT_SECTION __attribute__ ((section (".text")))
|
||||
#define PAYLOAD_DATA __attribute__ ((section (".payload_data")))
|
||||
|
||||
#endif //CHECKM8_TOOL_DEV_UTIL_H
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
#include "dev/addr.h"
|
||||
#include "bootrom_func.h"
|
||||
|
||||
PAYLOAD_SECTION
|
||||
void fix_heap()
|
||||
{
|
||||
*((unsigned long long *) 0x1801b91a0) = 0x80 / 0x40;
|
||||
*((unsigned long long *) 0x1801b91a8) = ((0x840u / 0x40) << 2u);
|
||||
*((unsigned long long *) 0x1801b91b0) = 0x80;
|
||||
*((unsigned long long *) 0x1801b91b8) = 0;
|
||||
|
||||
*((unsigned long long *) 0x1801b9220) = 0x80 / 0x40;
|
||||
*((unsigned long long *) 0x1801b9228) = ((0x80u / 0x40) << 2u);
|
||||
*((unsigned long long *) 0x1801b9230) = 0x80;
|
||||
*((unsigned long long *) 0x1801b9238) = 0;
|
||||
|
||||
*((unsigned long long *) 0x1801b92a0) = 0x80 / 0x40;
|
||||
*((unsigned long long *) 0x1801b92a8) = ((0x80u / 0x40) << 2u);
|
||||
*((unsigned long long *) 0x1801b92b0) = 0x80;
|
||||
*((unsigned long long *) 0x1801b92b8) = 0;
|
||||
|
||||
__asm__ volatile ("dmb sy");
|
||||
calc_chksum((unsigned long long *) 0x1801b9180,
|
||||
(unsigned long long *) 0x1801b91a0,
|
||||
32,
|
||||
(unsigned long long *) 0x180080640);
|
||||
|
||||
calc_chksum((unsigned long long *) 0x1801b9200,
|
||||
(unsigned long long *) 0x1801b9220,
|
||||
32,
|
||||
(unsigned long long *) 0x180080640);
|
||||
|
||||
calc_chksum((unsigned long long *) 0x1801b9280,
|
||||
(unsigned long long *) 0x1801b92a0,
|
||||
32,
|
||||
(unsigned long long *) 0x180080640);
|
||||
|
||||
__asm__ volatile ("dmb sy");
|
||||
check_all_chksums();
|
||||
}
|
||||
|
||||
void entry_sync(unsigned long long *self)
|
||||
{
|
||||
fix_heap();
|
||||
|
||||
*(ADDR_DFU_RETVAL) = -1;
|
||||
*(ADDR_DFU_STATUS) = 1;
|
||||
|
||||
event_notify((struct event *) ADDR_DFU_EVENT);
|
||||
dev_free(self);
|
||||
}
|
||||
|
||||
void entry_async(uint64_t *base){}
|
||||
28
c8_remote/lib/payload/src/system/exit_usb_task.c
Normal file
28
c8_remote/lib/payload/src/system/exit_usb_task.c
Normal file
@@ -0,0 +1,28 @@
|
||||
#include "dev/addr.h"
|
||||
#include "bootrom_func.h"
|
||||
|
||||
PAYLOAD_SECTION
|
||||
void entry_sync(uint64_t addr_hook)
|
||||
{
|
||||
uint64_t *bs_task_sp = ((uint64_t *) ADDR_BOOTSTRAP_TASK + (0x128 / 8));
|
||||
uint64_t *bs_task_stack = (uint64_t *) *bs_task_sp;
|
||||
|
||||
while(1)
|
||||
{
|
||||
if(*bs_task_stack == ADDR_GETDFU_EXIT)
|
||||
{
|
||||
*bs_task_stack = addr_hook;
|
||||
break;
|
||||
}
|
||||
|
||||
bs_task_stack++;
|
||||
}
|
||||
|
||||
*(ADDR_DFU_RETVAL) = -1;
|
||||
*(ADDR_DFU_STATUS) = 1;
|
||||
|
||||
event_notify((struct event *) ADDR_DFU_EVENT);
|
||||
}
|
||||
|
||||
PAYLOAD_SECTION
|
||||
void entry_async(){}
|
||||
11
c8_remote/lib/payload/src/system/init_sys.c
Normal file
11
c8_remote/lib/payload/src/system/init_sys.c
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
void entry_sync()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void entry_async()
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user