Packing with the in-built python struct module is often a pain with loads of unnecessary options to remember. pwntools makes this a breeze, using the context global variable to automatically calculate how the packing should work.
p64(addr)
Packs addr depending on context, which by default is little-endian.
p64() returns a bytes-like object, so you'll have to form your padding as b'A' instead of just 'A'.
u64(data)
Unpacks data depending on context; exact opposite of p64().
flat(*args)
Can take a bunch of arguments and packs them all according to context. The full functionality is quite , but essentially:
is equivalent to
flat() uses context, so unless you specify that it is 64 bits it will attempt to pack it as 32 bits.