> qsort( maps->buff, maps->size, sizeof(struct paw_map), paw_compare_maps );
Your size should be the number of elements, not the number of bytes.
Printable View
> qsort( maps->buff, maps->size, sizeof(struct paw_map), paw_compare_maps );
Your size should be the number of elements, not the number of bytes.
Never mind, I misunderstood the 2nd parameter of qsort(), thought it was total size but was just the count of elements
Trying to add support for register grabbing in paw but currently get a compiler error even after referencing a guide, the compiler error is that it cannot find <machine/reg.h> which is needed for the structs expeceted by PT_GETREGS etc, anyone know what package I should install on my manjaro distro to fix this?
Edit: btw, for anyone interested, I was referencing this guide: How Debuggers Work: Getting and Setting x86 Registers, Part 1 | Moritz Systems
3 minutes of searching implies "machine/reg.h" is BSD based header; and it is likely a different header under Linux.
Tim S.
Well that's more than I got, kept getting directed to sys/reg.h (which I'm currently attempting to use but is not going well).
Side question, anyone see why this would skip the loop?
The related functions:Code:#if defined( __x86_64__ ) && defined( LLONG_MAX ) && LLONG_MAX > LONG_MAX
typedef unsigned long long pawt_reg;
#define PRI_PAWT "ll"
#else
typedef unsigned long pawt_reg;
#define PRI_PAWT "l"
#endif
#define PAW_MAX_REGISTERS 64
struct paw_gpreg
{
pawt_reg regs[PAW_MAX_REGISTERS];
};
struct paw_fpreg
{
pawt_reg regs[PAW_MAX_REGISTERS];
};
struct paw_dbreg
{
pawt_reg regs[PAW_MAX_REGISTERS];
};
...
puts("Getting General Purpose Registers");
gpr = paw_get_app_gpr( app );
for ( size_t i = 0; i < PAW_MAX_REGISTERS; ++i )
{
printf("Register %zu = %016" PRI_PAWT "X\n", i, gpr.regs[i] );
}
puts("Success, exiting...");
??? Soon as I fixed the mistake in the paw_get_app_fpr() function that I noticed after this post the loop decided to execute, I can only assume make decide the file hadn't been updated the first timeCode:PAW_SHARED struct paw_gpreg paw_get_app_gpr( struct paw_app *app )
{
struct paw_gpreg gpr;
memset( &gpr, 0, sizeof(struct paw_dbreg) );
(void)ptrace( PT_GETREGS, app->pid, &gpr, 0 );
return gpr;
}
PAW_SHARED struct paw_fpreg paw_get_app_fpr( struct paw_app *app )
{
struct paw_fpreg fpr;
memset( &fpr, 0, sizeof(struct paw_fpreg) );
(void)ptrace( PT_GETREGS, app->pid, &fpr, 0 );
return fpr;
}
PAW_SHARED struct paw_dbreg paw_get_app_dbr( struct paw_app *app )
{
struct paw_dbreg dbr;
memset( &dbr, 0, sizeof(struct paw_dbreg) );
#ifdef PT_GETDBREGS
(void)ptrace( PT_GETDBREGS, app->pid, &dbr, 0 );
#endif
return dbr;
}
Started writing the lua wrapper for paw and ran into a problem with library locations, here's what I have right now:
And the exact output is this:Code:include dir.mak
include $(MAK_DIR)/sys/sys.mak
include $(MAK_DIR)/cc/cc.mak
ALL_SRC_FILES:=$(wildcard $(SRC_DIR)/*.c)
lpaw_src_files:=$(filter-out lchkpaw.c,$(ALL_SRC_FILES))
lpaw_obj_files:=$(lpaw_src_files:%=%.obj)
lpaw_o_files:=$(lpaw_src_files:%=%.o)
liblpaw_so:=liblpaw$(SYS_LIB_SFX)
lpawd_obj_files:=$(lpaw_src_files:%=%d.obj)
lpawd_o_files:=$(lpaw_src_files:%=%d.o)
liblpawd_so:=liblpawd$(SYS_LIB_SFX)
lchkpaw_out:=lchkpaw$(SYS_EXE_SFX)
lchkpawd_out:=lchkpawd$(SYS_EXE_SFX)
IFLAGS:=$(CC_I) $(INC_DIR) $(CC_I) $(PAW_DIR)/include
LFLAGS:=$(CC_L) $(LIB_DIR) $(CC_L) $(PAW_DIR)/lib
BFLAGS:=-fPIC $(IFLAGS) $(LFLAGS)
CFLAGS:=-fPIC $(IFLAGS) $(LFLAGS)
LD_WIN32_PATHS:=PATH="$(BIN_DIR);$(PATH)"
LD_POSIX_PATHS:=LD_LIBRARY_PATH=$(BIN_DIR):$(LD_LIBRARY_PATHS)
LD_PATHS:=$(if $(SYS_IS_WINDOWS),$(LD_WIN32_PATHS),$(LD_POSIX_PATHS))
$(info LD_PATHS=$(LD_PATHS))
# TODO: create a macro for the target debugger option
DBG_FLAGS:=-ggdb $(CC_D) _DEBUG
run: build $(BIN_DIR)/$(liblpaw_so)
$(LD_PATHS) && $(BIN_DIR)/$(lchkpaw_out)
rebuild: clean build
debug: build_debug $(BIN_DIR)/$(liblpawd_so)
$(LD_PATHS) && cd $(BIN_DIR) && gdb --args ./$(lchkpaw_out)
gede: build_debug
$(LD_PATHS) && cd $(BIN_DIR) &&
rebuild_debug: clean build_debug
clean:
$(SYS_DEL) *.exe
$(SYS_DEL) *.dll
$(SYS_DEL) *.obj
$(SYS_DEL) *.out
$(SYS_DEL) *.so
$(SYS_DEL) *.o
# Quick
build: $(BIN_DIR)/$(lchkpaw_out)
build_lib: $(LIB_DIR)/$(liblpaw_so)
$(BIN_DIR)/lchkpaw.exe: $(LIB_DIR)/liblpaw.dll
$(LD_PATHS) && $(CC) $(BFLAGS) $(CC_o) $@ $(SRC_DIR)/lchkpaw.c $(CC_l)lpaw $(CC_l)lua
$(LIB_DIR)/liblpaw32.dll: $(lpaw_obj_files) $(LIB_DIR)/libpaw32.dll
$(LD_PATHS) && $(CC) $(BFLAGS) $(CC_o) $@ $(lpaw_obj_files) $(CC_l)paw $(CC_l)lua
$(BIN_DIR)/lchkpaw: $(LIB_DIR)/liblpaw.so
$(LD_PATHS) && $(CC) $(BFLAGS) $(CC_o) $@ $(SRC_DIR)/lchkpaw.c $(CC_l)lpaw $(CC_l)lua
$(LIB_DIR)/liblpaw.so: $(lpaw_o_files) $(LIB_DIR)/libpaw.so
$(LD_PATHS) && $(CC) $(BFLAGS) $(CC_o) $@ $(lpaw_o_files) $(CC_l)paw $(CC_l)lua
$(SRC_DIR)/%.obj: $(SRC_DIR)/%
$(CC) $(CFLAGS) $(CC_o) $@ $(CC_c) $<
$(SRC_DIR)/%.o: $(SRC_DIR)/%
$(CC) $(CFLAGS) $(CC_o) $@ $(CC_c) $<
# Debug
build_debug: $(BIN_DIR)/$(lchkpawd_out)
build_debug_lib: $(LIB_DIR)/$(liblpawd_so)
$(BIN_DIR)/lchkpawd.exe: $(LIB_DIR)/liblpawd.dll
$(LD_PATHS) && $(CC) $(DBG_FLAGS) $(BFLAGS) $(CC_o) $@ $(SRC_DIR)/lchkpaw.c $(CC_l)lpawd $(CC_l)lua
$(LIB_DIR)/liblpaw32d.dll: $(lpawd_obj_files) $(LIB_DIR)/libpawd32.dll
$(LD_PATHS) && $(CC) $(DBG_FLAGS) $(BFLAGS) $(CC_o) $@ $(lpawd_obj_files) $(CC_l)pawd $(CC_l)lua
$(BIN_DIR)/lchkpawd: $(LIB_DIR)/liblpawd.so
$(LD_PATHS) && $(CC) $(DBG_FLAGS) $(BFLAGS) $(CC_o) $@ $(SRC_DIR)/lchkpaw.c $(CC_l)lpawd $(CC_l)lua
$(LIB_DIR)/liblpawd.so: $(lpawd_o_files) $(LIB_DIR)/libpawd.so
$(LD_PATHS) && $(CC) $(DBG_FLAGS) $(BFLAGS) $(CC_o) $@ $(lpawd_o_files) $(CC_l)pawd $(CC_l)lua
$(SRC_DIR)/%d.obj: $(SRC_DIR)/%
$(LD_PATHS) && $(CC) $(DBG_FLAGS) $(CFLAGS) $(CC_o) $@ $(CC_c) $<
$(SRC_DIR)/%d.o: $(SRC_DIR)/%
$(CC) $(DBG_FLAGS) $(CFLAGS) $(CC_o) $@ $(CC_c) $<
# Common
$(BIN_DIR)/%.dll: $(LIB_DIR)/%.dll
cp $< $@
$(BIN_DIR)/%.so: $(LIB_DIR)/%.so
cp $< $@
$(LIB_DIR)/libpaw%: $(PAW_DIR)/lib/libpaw%
cp $< $@
$(PAW_DIR)/lib/%: %
cd $(PAW_DIR) && $(MAKE) $<
%.mak:
.PHONY: rebuild rebuild_debug clean build build_lib build_debug build_debug_lib
I don't see what I'm overlooking, any else able to spot it?Code:make --no-print-directory build
make -f main.mak build
LD_PATHS=LD_LIBRARY_PATH=./bin:
LD_LIBRARY_PATH=./bin: && gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o bin/lchkpaw ./src/lchkpaw.c -llpaw -llua
/usr/bin/ld: warning: libpaw.so, needed by ./lib/liblpaw.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: ./lib/liblpaw.so: undefined reference to `paw_init'
collect2: error: ld returned 1 exit status
make[1]: *** [main.mak:67: bin/lchkpaw] Error 1
make: *** [GNUmakefile:5: build] Error 2
Compilation failed.
Edit: I did check the folders and the ./lib ones were correctly generated but the ./bin ones I had to manually copy, didn't change the message though
I think I solved the previous issue but to confirm I need to get passed one that popped up now:
How can '.' not be a valid directory? Or am I missing something here?Code:...
gcc -I ./include -L ./lib -fPIC -shared -o lib/libpaw.so src/app.c.o src/apps.c.o src/lib.c.o src/libs.c.o src/maps.c.o src/paw.c.o src/shared.c.o -ldl
cp ../paw/lib/libpaw.so lib/libpaw.so
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o lib/liblpaw.so ./src/lapp.c.o ./src/lapps.c.o ./src/lchkpaw.c.o ./src/llib.c.o ./src/llibs.c.o ./src/lmaps.c.o ./src/lpaw.c.o -lpaw -llua -Wl,rpath=.
/usr/bin/ld: cannot find rpath=.: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [main.mak:79: lib/liblpaw.so] Error 1
make: *** [GNUmakefile:5: rebuild] Error 2
Compilation failed.
Full output:
Code:make --no-print-directory rebuild
make -f main.mak rebuild
LPATHS==.
rm -f ./bin/*.exe
rm -f ./bin/*.dll
rm -f ./lib/*.dll
rm -f ./src/*.obj
rm -f ./bin/*.out
rm -f ./bin/*.so
rm -f ./lib/*.so
rm -f ./src/*.o
cd ../paw && make clean
git -C ../mak pull
Already up to date.
make -f main.mak clean
rm -f ./bin/*.exe
rm -f ./lib/*.dll
rm -f ./src/*.obj
rm -f ./bin/*.out
rm -f ./lib/*.so
rm -f ./src/*.o
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lapp.c.o -c src/lapp.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lapps.c.o -c src/lapps.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lchkpaw.c.o -c src/lchkpaw.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/llib.c.o -c src/llib.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/llibs.c.o -c src/llibs.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lmaps.c.o -c src/lmaps.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lpaw.c.o -c src/lpaw.c
cd ../paw && make ./lib/libpaw.so
git -C ../mak pull
Already up to date.
make -f main.mak lib/libpaw.so
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/app.c.o -c src/app.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/apps.c.o -c src/apps.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/lib.c.o -c src/lib.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/libs.c.o -c src/libs.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/maps.c.o -c src/maps.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/paw.c.o -c src/paw.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/shared.c.o -c src/shared.c
gcc -I ./include -L ./lib -fPIC -shared -o lib/libpaw.so src/app.c.o src/apps.c.o src/lib.c.o src/libs.c.o src/maps.c.o src/paw.c.o src/shared.c.o -ldl
cp ../paw/lib/libpaw.so lib/libpaw.so
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o lib/liblpaw.so ./src/lapp.c.o ./src/lapps.c.o ./src/lchkpaw.c.o ./src/llib.c.o ./src/llibs.c.o ./src/lmaps.c.o ./src/lpaw.c.o -lpaw -llua -Wl,rpath=.
/usr/bin/ld: cannot find rpath=.: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [main.mak:79: lib/liblpaw.so] Error 1
make: *** [GNUmakefile:5: rebuild] Error 2
Compilation failed.
I think I solved the previous issue but to confirm I need to get passed one that popped up now:
How can '.' not be a valid directory? Or am I missing something here?Code:...
gcc -I ./include -L ./lib -fPIC -shared -o lib/libpaw.so src/app.c.o src/apps.c.o src/lib.c.o src/libs.c.o src/maps.c.o src/paw.c.o src/shared.c.o -ldl
cp ../paw/lib/libpaw.so lib/libpaw.so
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o lib/liblpaw.so ./src/lapp.c.o ./src/lapps.c.o ./src/lchkpaw.c.o ./src/llib.c.o ./src/llibs.c.o ./src/lmaps.c.o ./src/lpaw.c.o -lpaw -llua -Wl,rpath=.
/usr/bin/ld: cannot find rpath=.: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [main.mak:79: lib/liblpaw.so] Error 1
make: *** [GNUmakefile:5: rebuild] Error 2
Compilation failed.
Full output:
Edit: Never mind, just realised I missed the '-' character in front of rpathCode:make --no-print-directory rebuild
make -f main.mak rebuild
LPATHS==.
rm -f ./bin/*.exe
rm -f ./bin/*.dll
rm -f ./lib/*.dll
rm -f ./src/*.obj
rm -f ./bin/*.out
rm -f ./bin/*.so
rm -f ./lib/*.so
rm -f ./src/*.o
cd ../paw && make clean
git -C ../mak pull
Already up to date.
make -f main.mak clean
rm -f ./bin/*.exe
rm -f ./lib/*.dll
rm -f ./src/*.obj
rm -f ./bin/*.out
rm -f ./lib/*.so
rm -f ./src/*.o
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lapp.c.o -c src/lapp.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lapps.c.o -c src/lapps.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lchkpaw.c.o -c src/lchkpaw.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/llib.c.o -c src/llib.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/llibs.c.o -c src/llibs.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lmaps.c.o -c src/lmaps.c
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o src/lpaw.c.o -c src/lpaw.c
cd ../paw && make ./lib/libpaw.so
git -C ../mak pull
Already up to date.
make -f main.mak lib/libpaw.so
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/app.c.o -c src/app.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/apps.c.o -c src/apps.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/lib.c.o -c src/lib.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/libs.c.o -c src/libs.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/maps.c.o -c src/maps.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/paw.c.o -c src/paw.c
gcc -I ./include -L ./lib -fPIC -D PAW_BUILD_SHARED -o src/shared.c.o -c src/shared.c
gcc -I ./include -L ./lib -fPIC -shared -o lib/libpaw.so src/app.c.o src/apps.c.o src/lib.c.o src/libs.c.o src/maps.c.o src/paw.c.o src/shared.c.o -ldl
cp ../paw/lib/libpaw.so lib/libpaw.so
gcc -fPIC -I ./include -I ../paw/include -L ./lib -L ../paw/lib -o lib/liblpaw.so ./src/lapp.c.o ./src/lapps.c.o ./src/lchkpaw.c.o ./src/llib.c.o ./src/llibs.c.o ./src/lmaps.c.o ./src/lpaw.c.o -lpaw -llua -Wl,rpath=.
/usr/bin/ld: cannot find rpath=.: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [main.mak:79: lib/liblpaw.so] Error 1
make: *** [GNUmakefile:5: rebuild] Error 2
Compilation failed.
Try using "-Wl,-rpath" (note: -r) instead of "-Wl,rpath"
Finally managed to fix the issue by setting rpath to $(LIB_DIR) instead of .