[MPlayer-dev-eng] state of realvideo?
Kees Cook
mplayer at outflux.net
Fri May 17 22:11:30 CEST 2002
On Fri, May 17, 2002 at 09:33:02PM +0200, Arpi wrote:
> objdump is very usefull, it can dump symbol tables and even disasm code.
> myold elfdisasm is also interesting to disasm elf objects wiht symbols
Okay, yeah, I've been using "nm -D", "objdump -CTd", and "readelf -sD".
All of them basically say the same thing. As far as finding some of the
callbacks, I used:
LD_DEBUG=files,bindings,libs realplay rv20file.rm >rv20-load.txt 2>&1
And I can parse out what functions the .so's are using inside realplay.
Figuring out function parameters and return values is the next trick. I
think I've seen some elf disassemblers that'll try to reconstruct that.
If not, I think the parameter sizes can at least be seen from the stack
usage in the disassembly.
How do these kinds of libraries usually work? Call a function with a
buffer location and size (containing a part of the stream), and what
happens? It makes callbacks for each decoded frame? Or returns a
buffer & size for the decoded frame?
Already I see some good candidates in "drv2":
$ grep 'binding file /usr/lib/RealPlayer8' rv20-load.txt | grep "to /usr/lib/RealPlayer8" | awk -F: '{print $2 " " $3}' | awk '{print $3 " => " $5 " " $NF}' | sed -e 's/\/usr\/lib\/RealPlayer8\///g' | sort | uniq | grep rv20.so
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420CustomMessage'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420Free'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420HiveMessage'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420Init'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420_RN_FRU_Free'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420_RN_FRU_GetFrame'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420_RN_FRU_Init'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420_RN_FRU_Setup'
Codecs/rv20.so.6.0 => Codecs/drv2.so.6.0 `RV20toYUV420Transform'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNCodec_Close'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNCodec_GetUIName'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNCodec_Open'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNCodec_StreamOpen'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_Close'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_GetInputBufferSize'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_GetIPNUnknown'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_GetProperty'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_GetStreamHeader'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_GetStreamHeaderSize'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_Input'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_SetDataCallback'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_SetOutputPacketSize'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `PNStream_SetProperty'
Plugins/rvrend.so.6.0 => Codecs/rv20.so.6.0 `SetDLLAccessPath'
> you can also check the realmedia SDK, downlaodable from mphq ftp, tech-doc/
> or so, or from real.com with some registration. anywya it's useless, at
> least for first look it has no lowlevel headers.
Figures. I wonder if they'd give out the .so headers if I asked really
nicely? Hm.
--
Kees Cook @outflux.net
More information about the MPlayer-dev-eng
mailing list