[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