Restructured payloads into folders

This commit is contained in:
2020-03-12 12:58:50 -04:00
parent 832009c83c
commit 4553174961
17 changed files with 72 additions and 80 deletions

View File

@@ -1,18 +1,23 @@
set(PL_NAMES set(PL_NAMES
aes_busy crypto:aes_busy
aes_sw_bern crypto:aes_sw_bern
aes_sw_corr crypto:aes_sw_corr
cachelib
exit_usb_task system:cachelib
floppysleep system:exit_usb_task
sync system:init_sys
system:sync
power:floppysleep
) )
foreach(NAME ${PL_NAMES}) foreach(NAME ${PL_NAMES})
list(APPEND PL_TARGETS "payload_${NAME}") string(REGEX REPLACE "^[^:]*\\:(.*)$" "\\1" NAME_ONLY ${NAME})
list(APPEND PL_SRC_BIN "${CMAKE_CURRENT_LIST_DIR}/payload/src/${NAME}.c") list(APPEND PL_TARGETS "payload_${NAME_ONLY}")
endforeach(NAME) endforeach(NAME)
message("${PL_TARGETS}")
foreach(TARGET ${PL_TARGETS}) foreach(TARGET ${PL_TARGETS})
list(APPEND PL_SRC_LIB "${CMAKE_CURRENT_BINARY_DIR}/lib_cfiles/${TARGET}.c") 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") 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_CURRENT_BINARY_DIR}/lib_cfiles
${CMAKE_SOURCE_DIR}/c8_remote/include/tool) ${CMAKE_SOURCE_DIR}/c8_remote/include/tool)
add_library(experiments experiments/aes_sw.c add_library(experiments experiments/crypto.c
experiments/system.c experiments/system.c
experiments/power.c) experiments/power.c)
add_library(host_crypto crypto/aes_sw_impl.c crypto/aes_sw_host.c) add_library(host_crypto crypto/aes_sw_impl.c crypto/aes_sw_host.c)

View File

@@ -2,6 +2,7 @@
#include <stdio.h> #include <stdio.h>
#include "tool/command.h" #include "tool/command.h"
#include "dev/addr.h"
void usb_task_exit(struct pwned_device *dev) void usb_task_exit(struct pwned_device *dev)
{ {
@@ -38,8 +39,7 @@ void usb_task_exit(struct pwned_device *dev)
return; return;
} }
resp = execute_payload(dev, PAYLOAD_EXIT_USB_TASK, 0, resp = execute_payload(dev, PAYLOAD_EXIT_USB_TASK, 0, 0);
1, get_payload_address(dev, PAYLOAD_EXIT_USB_TASK));
if(IS_CHECKM8_FAIL(resp->ret)) if(IS_CHECKM8_FAIL(resp->ret))
{ {
printf("failed to exit usb task\n"); printf("failed to exit usb task\n");

View File

@@ -19,23 +19,24 @@ set(CMAKE_C_FLAGS "-nostdlib -O")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
foreach(NAME ${PL_NAMES}) foreach(NAME ${PL_NAMES})
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S) string(REPLACE ":" "/" SRC_PATH ${NAME})
add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/payload_entry.S string(REGEX REPLACE "^[^:]*\\:(.*)$" "\\1" NAME_ONLY ${NAME})
${CMAKE_CURRENT_LIST_DIR}/payload_entry.c
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c set(SRC_NAME ${NAME}_SRCS)
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S) set(${SRC_NAME} src/payload_entry.S src/payload_entry.c src/${SRC_PATH}.c)
else()
add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/payload_entry.S if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${SRC_PATH}.S)
${CMAKE_CURRENT_LIST_DIR}/payload_entry.c list(APPEND ${SRC_NAME} src/${SRC_PATH}.S)
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c)
endif() endif()
add_custom_command(TARGET payload_${NAME} POST_BUILD add_executable(payload_${NAME_ONLY} ${${SRC_NAME}})
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin 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} COMMAND ${CMAKE_OBJCOPY}
ARGS -O binary -j .text -j .payload_text ARGS -O binary -j .text -j .payload_text -j .payload_data
${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME} ${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME_ONLY}
${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin) ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME_ONLY}.bin)
endforeach(NAME) endforeach(NAME)
add_library(dev_crypto ../crypto/aes_sw_impl.c) add_library(dev_crypto ../crypto/aes_sw_impl.c)

View File

@@ -17,6 +17,6 @@ typedef unsigned int uint32_t;
typedef unsigned long long uint64_t; typedef unsigned long long uint64_t;
#define PAYLOAD_SECTION __attribute__ ((section (".payload_text"))) #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 #endif //CHECKM8_TOOL_DEV_UTIL_H

View File

@@ -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){}

View 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(){}

View File

@@ -0,0 +1,11 @@
void entry_sync()
{
}
void entry_async()
{
}