On Tue, 03 Sep 2013, nidhi mittal hada wrote:
Hi,
while in the pursuit of learning to understand assembly .. This is my doubt ..Please help to understand
*I want to catch where in this disassembly call is made to get_sb function.*
Somehow in this disassembly, i m not finding, a direct *call* instruction, with function name, written in english.
[...]
*Thats the definition of function*
vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void *data) { struct vfsmount *mnt; char *secdata = NULL; int error;
if (!type) return ERR_PTR(-ENODEV);
error = -ENOMEM;
* mnt = alloc_vfsmnt(name);* if (!mnt) goto out;
*<<<<<<<<<<<<<<THIS PORTION, IS NOT VISIBLE TO ME, **IN ASSEMBLY
* if (data && !(type->fs_flags & FS_BINARY_MOUNTDATA)) { secdata = alloc_secdata(); if (!secdata) goto out_mnt;
error = security_sb_copy_data(data, secdata); if (error) goto out_free_secdata; }
* error = type->get_sb(type, flags, name, data, mnt);>>>>>>>>>>>>>>>>thats the line i want to catch, in assembly above. Where is this call made in assembly ???* if (error < 0) goto out_free_secdata; BUG_ON(!mnt->mnt_sb); mnt->mnt_sb->s_flags |= MS_BORN;
* error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);* if (error) goto out_sb; . . . . . *out_sb:* dput(mnt->mnt_root); deactivate_locked_super(mnt->mnt_sb); *out_free_secdata*: free_secdata(secdata); *out_mnt:* free_vfsmnt(mnt); *out:* >>>368 return ERR_PTR(error); }
You won't find a "direct *call* instruction, with function name, written in english" because 'get_sb' is not a function[*] but a function pointer. And moreover it is a member of a structure. You will have to find out where a pointer to this structure is stored and where a member relative to this structure it is referenced in a call instruction. (Hint: It is the only function pointer inside 'type' which is used in this function. Moreover, it is the only function pointer used in this function at all.) Regards, Tobi [*] To my shame, I have no clue about the subtleties of definitions of entities in the C language. Please forgive me if my words don't accord with these definitions.